]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/acl/ldap_config.c
New option parsing
[netatalk.git] / libatalk / acl / ldap_config.c
index da37fb97027638370904806aba70aeef27003061..d719cafdfc4a2c66ea32a4297c195fddc93e949b 100644 (file)
 
 #include <atalk/ldapconfig.h>
 #include <atalk/logger.h>
+#include <atalk/iniparser.h>
 
-#define LINESIZE 1024
-
-/* Parse one line. Return result in pref and val */
-static int getpref(char *buf, char **R_pref, char **R_val)
-{
-    char *p, *pref, *val;
-
-    /* a little pre-processing to get rid of spaces and end-of-lines */
-    p = buf;
-    while (p && isspace(*p))
-        p++;
-    if (!p || (*p == '\0'))
-        return -1;
-
-    if ((val = strchr(p, '=')) == NULL)
-        return -1;
-    while ((*val == '=') || (*val == ' '))
-        val++;
-    if ((val = strtok(val, " \n")) == NULL)
-        return -1;
-    if ((val = strdup(val)) == NULL)
-        return -1;
-    if ((pref = strtok(p, " =")) == NULL)
-        return -1;
-
-    *R_pref = pref;
-    *R_val = val;
-    return 0;
-}
-
-/* Parse the afp_ldap.conf file */
-int acl_ldap_readconfig(char *name)
+int acl_ldap_readconfig(dictionary *iniconfig)
 {
     int i, j;
-    FILE *f;
-    char buf[LINESIZE];
-    char *pref, *val;
+    char *val;
 
-    f = fopen(name,"r");
-    if (!f) {
-        perror("fopen");
-        return -1;
+    i = 0;
+    /* now see if its a correct pref */
+    for (i = 0; ldap_prefs[i].name != NULL; i++) {
+        if ((val = iniparser_getstring(ldap_prefs[i].name)) != NULL) {
+            /* ok, found a valid pref */
+
+            /* check if we have pre-defined values */
+            if (ldap_prefs[i].intfromarray == 0) {
+                /* no, its just a string */
+                ldap_prefs[i].valid = 0;
+                if (ldap_prefs[i].strorint)
+                    /* store as int */
+                    *((int *)(ldap_prefs[i].pref)) = atoi(val);
+                else
+                    /* store string as string */
+                    *((char **)(ldap_prefs[i].pref)) = val;
+            } else {
+                /* ok, we have string to int mapping for this pref
+                   eg. "none", "simple", "sasl" map to 0, 128, 129 */
+                for (j = 0; prefs_array[j].pref != NULL; j++) {
+                    if ((strcmp(prefs_array[j].pref, ldap_prefs[i].name) == 0)
+                        && (strcmp(prefs_array[j].valuestring, val) == 0)) {
+                        ldap_prefs[i].valid = 0;
+                        *((int *)(ldap_prefs[i].pref)) = prefs_array[j].value;
+                        break;
+                    }
+                }
+            }
+        }
     }
 
-    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*/
-                } /* 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 */
     i = 0;
     ldap_config_valid = 1;