X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Facl%2Fldap_config.c;h=da37fb97027638370904806aba70aeef27003061;hb=85d268c10175d1e8050188a3a4797b40519a285e;hp=dd7acc67d49592b85ff622725fa153e2c0cde4fa;hpb=334f52f05d5cf4c9b4a612c7164ed94394a8e817;p=netatalk.git diff --git a/libatalk/acl/ldap_config.c b/libatalk/acl/ldap_config.c index dd7acc67..da37fb97 100644 --- a/libatalk/acl/ldap_config.c +++ b/libatalk/acl/ldap_config.c @@ -1,25 +1,25 @@ /* - $Id: ldap_config.c,v 1.2 2009-11-20 17:45:47 franklahm Exp $ - Copyright (c) 2009 Frank Lahm - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - */ + Copyright (c) 2009 Frank Lahm + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif /* HAVE_CONFIG_H */ -#ifdef HAVE_NFSv4_ACLS +#ifdef HAVE_LDAP #include +#include #include #include #include @@ -38,20 +38,20 @@ static int getpref(char *buf, char **R_pref, char **R_val) /* a little pre-processing to get rid of spaces and end-of-lines */ p = buf; while (p && isspace(*p)) - p++; + p++; if (!p || (*p == '\0')) - return -1; - + return -1; + if ((val = strchr(p, '=')) == NULL) - return -1; + return -1; while ((*val == '=') || (*val == ' ')) - val++; + val++; if ((val = strtok(val, " \n")) == NULL) - return -1; + return -1; if ((val = strdup(val)) == NULL) - return -1; + return -1; if ((pref = strtok(p, " =")) == NULL) - return -1; + return -1; *R_pref = pref; *R_val = val; @@ -68,51 +68,54 @@ int acl_ldap_readconfig(char *name) f = fopen(name,"r"); if (!f) { - perror("fopen"); - return -1; + perror("fopen"); + return -1; } while (!feof(f)) { - /* read a line from file */ - if (!fgets(buf, LINESIZE, f) || buf[0] == '#') - continue; - - /* parse and return pref and value */ - if ((getpref(buf, &pref, &val)) != 0) - continue; - - i = 0; - /* now see if its a correct pref */ - while(ldap_prefs[i].pref != NULL) { - if ((strcmp(ldap_prefs[i].name, pref)) == 0) { - /* ok, found a valid pref */ - - /* check if we have pre-defined values */ - if (0 == ldap_prefs[i].intfromarray) { - /* no, its just a string */ - ldap_prefs[i].valid = 0; - if (0 == ldap_prefs[i].strorint) - /* store string as string */ - *((char **)(ldap_prefs[i].pref)) = val; - else - /* store as int */ - *((int *)(ldap_prefs[i].pref)) = atoi(val); - } else { - /* ok, we have string to int mapping for this pref - eg. "none", "simple", "sasl" map to 0, 128, 129 */ - j = 0; - while(prefs_array[j].pref != NULL) { - if (((strcmp(prefs_array[j].pref, pref)) == 0) && - ((strcmp(prefs_array[j].valuestring, val)) == 0)) { - ldap_prefs[i].valid = 0; - *((int *)(ldap_prefs[i].pref)) = prefs_array[j].value; - } - j++; - } /* while j*/ - } /* else */ - } - i++; - } /* while i */ + /* read a line from file */ + if (!fgets(buf, LINESIZE, f) || buf[0] == '#') + continue; + + /* parse and return pref and value */ + if ((getpref(buf, &pref, &val)) != 0) + continue; + + i = 0; + /* now see if its a correct pref */ + while(ldap_prefs[i].pref != NULL) { + if ((strcmp(ldap_prefs[i].name, pref)) == 0) { + /* ok, found a valid pref */ + + /* check if we have pre-defined values */ + if (0 == ldap_prefs[i].intfromarray) { + /* no, its just a string */ + ldap_prefs[i].valid = 0; + if (0 == ldap_prefs[i].strorint) + /* store string as string */ + *((char **)(ldap_prefs[i].pref)) = val; + else + /* store as int */ + *((int *)(ldap_prefs[i].pref)) = atoi(val); + } else { + /* ok, we have string to int mapping for this pref + eg. "none", "simple", "sasl" map to 0, 128, 129 */ + j = 0; + while(prefs_array[j].pref != NULL) { + if (((strcmp(prefs_array[j].pref, pref)) == 0) && + ((strcmp(prefs_array[j].valuestring, val)) == 0)) { + ldap_prefs[i].valid = 0; + *((int *)(ldap_prefs[i].pref)) = prefs_array[j].value; + } + j++; + } /* while j*/ + } /* if else 0 == ldap_prefs*/ + break; + } /* if strcmp */ + i++; + } /* while i */ + if (ldap_prefs[i].pref == NULL) + LOG(log_error, logtype_afpd,"afp_ldap.conf: Unknown option: \"%s\"", pref); } /* EOF */ /* check if the config is sane and complete */ @@ -120,25 +123,26 @@ int acl_ldap_readconfig(char *name) ldap_config_valid = 1; while(ldap_prefs[i].pref != NULL) { - if ( ldap_prefs[i].valid != 0) { - ldap_config_valid = 0; - break; - } - i++; + if ( ldap_prefs[i].valid != 0) { + LOG(log_debug, logtype_afpd,"afp_ldap.conf: Missing option: \"%s\"", ldap_prefs[i].name); + ldap_config_valid = 0; + break; + } + i++; } if (ldap_config_valid) { - if (ldap_auth_method == LDAP_AUTH_NONE) - LOG(log_debug, logtype_afpd,"ldappref: Pref is ok. Using anonymous bind."); - else if (ldap_auth_method == LDAP_AUTH_SIMPLE) - LOG(log_debug, logtype_afpd,"ldappref: Pref is ok. Using simple bind."); - else { - ldap_config_valid = 0; - LOG(log_error, logtype_afpd,"ldappref: Pref not ok. SASL not yet supported."); - } + if (ldap_auth_method == LDAP_AUTH_NONE) + LOG(log_debug, logtype_afpd,"afp_ldap.conf: Using anonymous bind."); + else if (ldap_auth_method == LDAP_AUTH_SIMPLE) + LOG(log_debug, logtype_afpd,"afp_ldap.conf: Using simple bind."); + else { + ldap_config_valid = 0; + LOG(log_error, logtype_afpd,"afp_ldap.conf: SASL not yet supported."); + } } else - LOG(log_error, logtype_afpd,"ldappref: Pref is not ok."); + LOG(log_info, logtype_afpd,"afp_ldap.conf: not used"); fclose(f); return 0; } -#endif +#endif /* HAVE_LDAP */