/*
- * $Id: afp_options.c,v 1.39 2009-03-16 13:59:12 franklahm Exp $
+ * $Id: afp_options.c,v 1.52 2010-02-03 11:35:58 franklahm Exp $
*
* Copyright (c) 1997 Adrian Sun (asun@zoology.washington.edu)
* Copyright (c) 1990,1993 Regents of The University of Michigan.
#endif /* MIN */
/* FIXME CNID */
-char Cnid_srv[MAXHOSTNAMELEN + 1] = "localhost";
-int Cnid_port = 4700;
+const char *Cnid_srv = "localhost";
+const char *Cnid_port = "4700";
#define OPTIONS "dn:f:s:uc:g:P:ptDS:TL:F:U:hIvVm:"
#define LENGTH 512
free(opt->server);
if (opt->ipaddr && (opt->ipaddr != save->ipaddr))
free(opt->ipaddr);
+ if (opt->port && (opt->port != save->port))
+ free(opt->port);
if (opt->fqdn && (opt->fqdn != save->fqdn))
free(opt->fqdn);
if (opt->uampath && (opt->uampath != save->uampath))
options->systemvol.name = _PATH_AFPDSYSVOL;
options->configfile = _PATH_AFPDCONF;
options->uampath = _PATH_AFPDUAMPATH;
- options->uamlist = "uams_clrtxt.so,uams_dhx.so";
+ options->uamlist = "uams_dhx.so,uams_dhx2.so";
options->guest = "nobody";
options->loginmesg = "";
- options->transports = AFPTRANS_ALL;
+ options->transports = AFPTRANS_TCP; /* TCP only */
options->passwdfile = _PATH_AFPDPWFILE;
options->tickleval = 30;
options->timeout = 4;
options->unixcodepage = "LOCALE";
options->maccharset = CH_MAC;
options->maccodepage = "MAC_ROMAN";
- options->volnamelen = 31; /* Conservative default. 10.4/10.5 can handle up to 80 */
+ options->volnamelen = 80; /* spec: 255, 10.1: 73, 10.4/10.5: 80 */
options->ntdomain = NULL;
options->ntseparator = NULL;
+#ifdef USE_SRVLOC
+ /* don't advertize slp by default */
+ options->flags |= OPTION_NOSLP;
+#endif
}
/* parse an afpd.conf line. i'm doing it this way because it's
if (strstr(buf, " -nodebug"))
options->flags &= ~OPTION_DEBUG;
#ifdef USE_SRVLOC
- if (strstr(buf, " -noslp"))
- options->flags |= OPTION_NOSLP;
-#endif /* USE_SRVLOC */
+ if (strstr(buf, " -slp"))
+ options->flags &= ~OPTION_NOSLP;
+#endif
if (strstr(buf, " -nouservolfirst"))
options->flags &= ~OPTION_USERVOLFIRST;
}
/* -[no]setuplog <logtype> <loglevel> [<filename>]*/
- if ((c = getoption(buf, "-setuplog"))) {
- char *ptr, *logtype, *loglevel, *filename;
- ptr = c;
-
- /* logtype */
- logtype = ptr;
-
- /* get loglevel */
- ptr = strpbrk(ptr, " \t");
- if (ptr) {
- *ptr++ = 0;
- while (*ptr && isspace(*ptr))
- ptr++;
- loglevel = ptr;
-
- /* get filename */
- ptr = strpbrk(ptr, " \t");
- if (ptr) {
- *ptr++ = 0;
- while (*ptr && isspace(*ptr))
- ptr++;
- }
- filename = ptr;
- }
-
- /* finally call setuplog, filename can be NULL */
- setuplog(logtype, loglevel, filename);
+ c = buf;
+ /* Now THIS is hokey! Multiple occurrences are not supported by our current code, */
+ /* so I have to loop myself. */
+ while (NULL != (c = strstr(c, "-setuplog"))) {
+ char *optstr;
+ if ((optstr = getoption(c, "-setuplog"))) {
+ setuplog(optstr);
+ c += sizeof("-setuplog");
+ }
}
- if ((c = getoption(buf, "-unsetuplog"))) {
- char *ptr, *logtype, *loglevel, *filename;
-
- /* logtype */
- logtype = c;
-
- /* get filename, can be NULL */
- strtok(c, " \t");
- filename = strtok(NULL, " \t");
-
- /* finally call setuplog, filename can be NULL */
- setuplog(logtype, NULL, filename);
- }
+ if ((c = getoption(buf, "-unsetuplog")))
+ unsetuplog(c);
#ifdef ADMIN_GRP
if ((c = getoption(buf, "-admingroup"))) {
options->uamlist = opt;
if ((c = getoption(buf, "-ipaddr"))) {
+#if 0
struct in_addr inaddr;
if (inet_aton(c, &inaddr) && (opt = strdup(c))) {
if (!gethostbyaddr((const char *) &inaddr, sizeof(inaddr), AF_INET))
else {
LOG(log_error, logtype_afpd, "Error parsing -ipaddr, is %s in numbers-and-dots notation?", c);
}
+#endif
+ options->ipaddr = strdup(c);
}
/* FIXME CNID Cnid_srv is a server attribute */
if ((c = getoption(buf, "-cnidserver"))) {
- char *p;
- int len;
- p = strchr(c, ':');
- if (p != NULL && (len = p - c) <= MAXHOSTNAMELEN) {
- memcpy(Cnid_srv, c, len);
- Cnid_srv[len] = 0;
- Cnid_port = atoi(p +1);
- }
+ char *p = strrchr(c, ':');
+ if (p)
+ *p = 0;
+ Cnid_srv = strdup(c);
+ if (p)
+ Cnid_port = strdup(p + 1);
+ LOG(log_debug, logtype_afpd, "CNID Server: %s:%s", Cnid_srv, Cnid_port);
}
if ((c = getoption(buf, "-port")))
- options->port = atoi(c);
+ options->port = strdup(c);
if ((c = getoption(buf, "-ddpaddr")))
atalk_aton(c, &options->ddpaddr);
if ((c = getoption(buf, "-signature")) && (opt = strdup(c)))
* Show version information about afpd.
* Used by "afp -v".
*/
-void show_version( )
+static void show_version( void )
{
printf( "afpd %s - Apple Filing Protocol (AFP) daemon of Netatalk\n\n", VERSION );
puts( "afpd has been compiled with support for these features:\n" );
- printf( " AFP3.1 support:\t" );
+ printf( " AFP3.x support:\t" );
#ifdef AFP3x
puts( "Yes" );
#else
* Show extended version information about afpd and Netatalk.
* Used by "afp -V".
*/
-void show_version_extended( )
+static void show_version_extended(void )
{
show_version( );
/*
* Display compiled-in default paths
*/
-void show_paths( void )
+static void show_paths( void )
{
printf( " afpd.conf:\t%s\n", _PATH_AFPDCONF );
printf( " AppleVolumes.system:\t%s\n", _PATH_AFPDSYSVOL );
printf( " AppleVolumes.default:\t%s\n", _PATH_AFPDDEFVOL );
printf( " UAM search path:\t%s\n", _PATH_AFPDUAMPATH );
+ printf( " Server messages path:\t%s\n", SERVERTEXT);
}
/*
* Display usage information about adpd.
*/
-void show_usage( char *name )
+static void show_usage( char *name )
{
fprintf( stderr, "Usage:\t%s [-dDIptTu] [-c maxconnections] [-f defaultvolumes] [-F config]\n", name );
fprintf( stderr, "\t [-g guest] [-L message] [-m umask][-n nbpname] [-P pidfile]\n" );
options->transports &= ~AFPTRANS_DDP;
break;
case 'S':
- options->port = atoi(optarg);
+ options->port = optarg;
break;
case 'T':
options->transports &= ~AFPTRANS_TCP;