diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2010-05-15 15:41:23 +0000 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2010-05-15 15:41:23 +0000 |
commit | 361faebcf6bdf30cac386b44fe9c30ea9490554e (patch) | |
tree | 8bbf64147606399fc009d23d71f1fb5a59bff5c9 /nslcd/attmap.c | |
parent | 5c11f057d90a09e30eaa9a4f321874fb58da036d (diff) |
always clear returned buffer when performing attribute mapping (based on a patch by Nalin Dahyabhai <nalin@redhat.com>)
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1111 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nslcd/attmap.c')
-rw-r--r-- | nslcd/attmap.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/nslcd/attmap.c b/nslcd/attmap.c index f703345..09b02bb 100644 --- a/nslcd/attmap.c +++ b/nslcd/attmap.c @@ -251,20 +251,25 @@ static const char *entry_expand(const char *name,void *expander_attr) return values[0]; } -MUST_USE const char *attmap_get_value(MYLDAP_ENTRY *entry,const char *attr,char *buffer,size_t buflen) +const char *attmap_get_value(MYLDAP_ENTRY *entry,const char *attr,char *buffer,size_t buflen) { const char **values; + /* check and clear buffer */ + if ((buffer==NULL)||(buflen<=0)) + return NULL; + buffer[0]='\0'; /* for simple values just return the attribute */ if (attr[0]!='"') { values=myldap_get_values(entry,attr); - if (values==NULL) + if ((values==NULL)||(values[0]==NULL)) return NULL; strncpy(buffer,values[0],buflen); buffer[buflen-1]='\0'; return buffer; /* TODO: maybe warn when multiple values are found */ } + /* we have an expression, try to parse */ if ( (attr[strlen(attr)-1]!='"') || (expr_parse(attr+1,buffer,buflen,entry_expand,(void *)entry)==NULL) ) { |