X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=libatalk%2Futil%2Fnetatalk_conf.c;h=a3cd87e7a551b77919ade214054720473eb56df4;hb=c68133999a8dc7839efe0280366b2ab871210ef8;hp=8720ff54db913eedfd3a4809d206d0bf0879fe09;hpb=ac34cdb856bba34262a773d60d10b8c8de90404c;p=netatalk.git diff --git a/libatalk/util/netatalk_conf.c b/libatalk/util/netatalk_conf.c index 8720ff54..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/") ); @@ -1380,7 +1394,7 @@ struct vol *getvolbyname(const char *name) /*! * Initialize an AFPObj and options from ini config file */ -int afp_config_parse(AFPObj *AFPObj) +int afp_config_parse(AFPObj *AFPObj, char *processname) { EC_INIT; dictionary *config; @@ -1390,6 +1404,9 @@ int afp_config_parse(AFPObj *AFPObj) 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,6 +1421,8 @@ int afp_config_parse(AFPObj *AFPObj) options->logconfig = iniparser_getstrdup(config, INISEC_GLOBAL, "log level", "default:note"); options->logfile = iniparser_getstrdup(config, INISEC_GLOBAL, "log file", NULL); + setuplog(options->logconfig, options->logfile); + /* "server options" boolean options */ if (!iniparser_getboolean(config, INISEC_GLOBAL, "zeroconf", 1)) options->flags |= OPTION_NOZEROCONF; @@ -1513,38 +1532,52 @@ int afp_config_parse(AFPObj *AFPObj) /* 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)