summaryrefslogtreecommitdiff
path: root/nslcd/common.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2010-12-24 14:31:04 +0000
committerArthur de Jong <arthur@arthurdejong.org>2010-12-24 14:31:04 +0000
commitb3dd209fc66d7fdf65809d70bb98b4c76213a892 (patch)
treea03e1d4fb8ec60e8900321d2d76a851346e528af /nslcd/common.c
parente3cf49d16bd719b842ac943bf4173cbda1818b87 (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.c21
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;