X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=libatalk%2Futil%2Fnetatalk_conf.c;h=a3cd87e7a551b77919ade214054720473eb56df4;hp=309feb950c2cfb2263037c6c008090bc2bd551c7;hb=c68133999a8dc7839efe0280366b2ab871210ef8;hpb=fee1732c3629fae8a46faf23e8be696110d976b9 diff --git a/libatalk/util/netatalk_conf.c b/libatalk/util/netatalk_conf.c index 309feb95..a3cd87e7 100644 --- a/libatalk/util/netatalk_conf.c +++ b/libatalk/util/netatalk_conf.c @@ -31,6 +31,12 @@ #include #include #include +#if HAVE_LOCALE_H +#include +#endif +#if HAVE_LANGINFO_H +#include +#endif #include #include @@ -626,16 +632,24 @@ static struct vol *creatvol(AFPObj *obj, EC_NULL( volume->v_veto = strdup(val) ); /* vol charset is in [G] and [V] */ - if (val = getoption(obj->iniconfig, section, "vol charset", preset, NULL)) + if (val = getoption(obj->iniconfig, section, "vol charset", preset, NULL)) { + if (strcasecmp(val, "UTF-8") == 0) { + val = strdup("UTF8"); + } EC_NULL( volume->v_volcodepage = strdup(val) ); + } else EC_NULL( volume->v_volcodepage = strdup(obj->options.volcodepage) ); /* mac charset is in [G] and [V] */ - if (val = getoption(obj->iniconfig, section, "mac charset", preset, NULL)) + if (val = getoption(obj->iniconfig, section, "mac charset", preset, NULL)) { + if (strncasecmp(val, "MAC", 3) != 0) { + LOG(log_warning, logtype_afpd, "Is '%s' really mac charset? ", val); + } EC_NULL( volume->v_maccodepage = strdup(val) ); + } else - EC_NULL( volume->v_maccodepage = strdup(obj->options.maccodepage) ); + EC_NULL( volume->v_maccodepage = strdup(obj->options.maccodepage) ); bstring dbpath; EC_NULL_LOG( val = iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol dbpath", _PATH_STATEDIR "CNID/") ); @@ -1390,6 +1404,9 @@ int afp_config_parse(AFPObj *AFPObj, char *processname) char *q, *r; char val[MAXVAL]; + if (processname != NULL) + set_processname(processname); + AFPObj->afp_version = 11; options->configfile = AFPObj->cmdlineconfigfile ? strdup(AFPObj->cmdlineconfigfile) : strdup(_PATH_CONFDIR "afp.conf"); options->sigconffile = strdup(_PATH_STATEDIR "afp_signature.conf"); @@ -1404,10 +1421,7 @@ int afp_config_parse(AFPObj *AFPObj, char *processname) options->logconfig = iniparser_getstrdup(config, INISEC_GLOBAL, "log level", "default:note"); options->logfile = iniparser_getstrdup(config, INISEC_GLOBAL, "log file", NULL); - if (processname[0] != '\0') { - set_processname(processname); - setuplog(options->logconfig, options->logfile); - } + setuplog(options->logconfig, options->logfile); /* "server options" boolean options */ if (!iniparser_getboolean(config, INISEC_GLOBAL, "zeroconf", 1)) @@ -1518,38 +1532,52 @@ int afp_config_parse(AFPObj *AFPObj, char *processname) /* unix charset is in [G] only */ if (!(p = iniparser_getstring(config, INISEC_GLOBAL, "unix charset", NULL))) { - options->unixcharset = CH_UNIX; - options->unixcodepage = strdup("LOCALE"); + options->unixcodepage = strdup("UTF8"); + charset_names[CH_UNIX] = strdup("UTF8"); } else { - if ((options->unixcharset = add_charset(p)) == (charset_t)-1) { - options->unixcharset = CH_UNIX; - options->unixcodepage = strdup("LOCALE"); - LOG(log_warning, logtype_afpd, "Setting unix charset to '%s' failed", p); - } else { - options->unixcodepage = strdup(p); + if (strcasecmp(p, "LOCALE") == 0) { +#if defined(CODESET) + setlocale(LC_ALL, ""); + p = nl_langinfo(CODESET); + LOG(log_debug, logtype_afpd, "Locale charset is '%s'", p); +#else /* system doesn't have LOCALE support */ + LOG(log_warning, logtype_afpd, "system doesn't have LOCALE support"); + p = strdup("UTF8"); +#endif + } + if (strcasecmp(p, "UTF-8") == 0) { + p = strdup("UTF8"); } + options->unixcodepage = strdup(p); + charset_names[CH_UNIX] = strdup(p); } + options->unixcharset = CH_UNIX; + LOG(log_debug, logtype_afpd, "Global unix charset is %s", options->unixcodepage); - /* vol charset is in [G[ and [V] */ + /* vol charset is in [G] and [V] */ if (!(p = iniparser_getstring(config, INISEC_GLOBAL, "vol charset", NULL))) { - options->volcodepage = strdup("UTF8"); + options->volcodepage = strdup(options->unixcodepage); } else { + if (strcasecmp(p, "UTF-8") == 0) { + p = strdup("UTF8"); + } options->volcodepage = strdup(p); } - + LOG(log_debug, logtype_afpd, "Global vol charset is %s", options->volcodepage); + /* mac charset is in [G] and [V] */ if (!(p = iniparser_getstring(config, INISEC_GLOBAL, "mac charset", NULL))) { - options->maccharset = CH_MAC; options->maccodepage = strdup("MAC_ROMAN"); + charset_names[CH_MAC] = strdup("MAC_ROMAN"); } else { - if ((options->maccharset = add_charset(p)) == (charset_t)-1) { - options->maccharset = CH_MAC; - options->maccodepage = strdup("MAC_ROMAN"); - LOG(log_warning, logtype_afpd, "Setting mac charset to '%s' failed", p); - } else { - options->maccodepage = strdup(p); + if (strncasecmp(p, "MAC", 3) != 0) { + LOG(log_warning, logtype_afpd, "Is '%s' really mac charset? ", p); } + options->maccodepage = strdup(p); + charset_names[CH_MAC] = strdup(p); } + options->maccharset = CH_MAC; + LOG(log_debug, logtype_afpd, "Global mac charset is %s", options->maccodepage); /* Check for sane values */ if (options->tickleval <= 0)