diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2010-12-24 14:31:04 +0000 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2010-12-24 14:31:04 +0000 |
commit | b3dd209fc66d7fdf65809d70bb98b4c76213a892 (patch) | |
tree | a03e1d4fb8ec60e8900321d2d76a851346e528af /nslcd/common.c | |
parent | e3cf49d16bd719b842ac943bf4173cbda1818b87 (diff) |
make logic of character tests easier to read
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1339 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nslcd/common.c')
-rw-r--r-- | nslcd/common.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/nslcd/common.c b/nslcd/common.c index d88bb60..6146942 100644 --- a/nslcd/common.c +++ b/nslcd/common.c @@ -100,13 +100,20 @@ int isvalidname(const char *name) if (i>=LOGIN_NAME_MAX) return 0; #endif /* LOGIN_NAME_MAX */ - if ( ! ( ( (i!=0) && (name[i]=='-') ) || - ( (i!=0) && (name[i]=='\\') && name[i+1]!='\0' ) || - (name[i]>='@' && name[i] <= 'Z') || - (name[i]>='a' && name[i] <= 'z') || - (name[i]>='0' && name[i] <= '9') || - name[i]=='.' || name[i]=='_' || name[i]=='$' || name[i]==' ') ) - return 0; + /* characters supported everywhere in the name */ + if ( (name[i]>='@' && name[i] <= 'Z') || + (name[i]>='a' && name[i] <= 'z') || + (name[i]>='0' && name[i] <= '9') || + name[i]=='.' || name[i]=='_' || name[i]=='$' ) + continue; + /* characters that may be anywhere except as first character */ + if ( i>0 && name[i]=='-' ) + continue; + /* characters that may not be the first or last character */ + if ( ( i>0 && name[i+1]!='\0' ) && ( name[i]=='\\' || name[i]==' ') ) + continue; + /* anything else is bad */ + return 0; } /* no test failed so it must be good */ return -1; |