- AFPConfig *config;
- ATP atp;
- ASP asp;
- char *Obj, *Type = "AFPServer", *Zone = "*";
-
- if ((config = (AFPConfig *) calloc(1, sizeof(AFPConfig))) == NULL)
- return NULL;
-
- if ((atp = atp_open(ATADDR_ANYPORT, &options->ddpaddr)) == NULL) {
- syslog( LOG_ERR, "main: atp_open: %m");
- free(config);
- return NULL;
- }
-
- if ((asp = asp_init( atp )) == NULL) {
- syslog( LOG_ERR, "main: asp_init: %m" );
- atp_close(atp);
- free(config);
- return NULL;
- }
-
- /* register asp server */
- Obj = (char *) options->hostname;
- if (nbp_name(options->server, &Obj, &Type, &Zone )) {
- syslog( LOG_ERR, "main: can't parse %s", options->server );
- goto serv_free_return;
- }
-
- /* dup Obj, Type and Zone as they get assigned to a single internal
- * buffer by nbp_name */
- if ((config->obj.Obj = strdup(Obj)) == NULL)
- goto serv_free_return;
-
- if ((config->obj.Type = strdup(Type)) == NULL) {
- free(config->obj.Obj);
- goto serv_free_return;
- }
-
- if ((config->obj.Zone = strdup(Zone)) == NULL) {
- free(config->obj.Obj);
- free(config->obj.Type);
- goto serv_free_return;
- }
-
- /* make sure we're not registered */
- nbp_unrgstr(Obj, Type, Zone, &options->ddpaddr);
- if (nbp_rgstr( atp_sockaddr( atp ), Obj, Type, Zone ) < 0 ) {
- syslog( LOG_ERR, "Can't register %s:%s@%s", Obj, Type, Zone );
- free(config->obj.Obj);
- free(config->obj.Type);
- free(config->obj.Zone);
- goto serv_free_return;
- }
-
- syslog( LOG_INFO, "%s:%s@%s started on %u.%u:%u (%s)", Obj, Type, Zone,
- ntohs( atp_sockaddr( atp )->sat_addr.s_net ),
- atp_sockaddr( atp )->sat_addr.s_node,
- atp_sockaddr( atp )->sat_port, VERSION );
-
- config->fd = atp_fileno(atp);
- config->obj.handle = asp;
- config->obj.config = config;
- config->obj.proto = AFPPROTO_ASP;
-
- memcpy(&config->obj.options, options, sizeof(struct afp_options));
- config->optcount = refcount;
- (*refcount)++;
-
- config->server_start = asp_start;
- config->server_cleanup = asp_cleanup;
-
- return config;
+ AFPConfig *config;
+ ATP atp;
+ ASP asp;
+ char *Obj, *Type = "AFPServer", *Zone = "*";
+ char *convname = NULL;
+
+ if ((config = (AFPConfig *) calloc(1, sizeof(AFPConfig))) == NULL)
+ return NULL;
+
+ if ((atp = atp_open(ATADDR_ANYPORT, &options->ddpaddr)) == NULL) {
+ LOG(log_error, logtype_afpd, "main: atp_open: %s", strerror(errno) );
+ free(config);
+ return NULL;
+ }
+
+ if ((asp = asp_init( atp )) == NULL) {
+ LOG(log_error, logtype_afpd, "main: asp_init: %s", strerror(errno) );
+ atp_close(atp);
+ free(config);
+ return NULL;
+ }
+
+ /* register asp server */
+ Obj = (char *) options->hostname;
+ if (options->server && (size_t)-1 ==(convert_string_allocate( options->unixcharset, options->maccharset,
+ options->server, strlen(options->server), &convname)) ) {
+ if ((convname = strdup(options->server)) == NULL ) {
+ LOG(log_error, logtype_afpd, "malloc: %s", strerror(errno) );
+ goto serv_free_return;
+ }
+ }
+
+ if (nbp_name(convname, &Obj, &Type, &Zone )) {
+ LOG(log_error, logtype_afpd, "main: can't parse %s", options->server );
+ goto serv_free_return;
+ }
+ if (convname)
+ free (convname);
+
+ /* dup Obj, Type and Zone as they get assigned to a single internal
+ * buffer by nbp_name */
+ if ((config->obj.Obj = strdup(Obj)) == NULL)
+ goto serv_free_return;
+
+ if ((config->obj.Type = strdup(Type)) == NULL) {
+ free(config->obj.Obj);
+ goto serv_free_return;
+ }
+
+ if ((config->obj.Zone = strdup(Zone)) == NULL) {
+ free(config->obj.Obj);
+ free(config->obj.Type);
+ goto serv_free_return;
+ }
+
+ /* make sure we're not registered */
+ nbp_unrgstr(Obj, Type, Zone, &options->ddpaddr);
+ if (nbp_rgstr( atp_sockaddr( atp ), Obj, Type, Zone ) < 0 ) {
+ LOG(log_error, logtype_afpd, "Can't register %s:%s@%s", Obj, Type, Zone );
+ free(config->obj.Obj);
+ free(config->obj.Type);
+ free(config->obj.Zone);
+ goto serv_free_return;
+ }
+
+ LOG(log_info, logtype_afpd, "%s:%s@%s started on %u.%u:%u (%s)", Obj, Type, Zone,
+ ntohs( atp_sockaddr( atp )->sat_addr.s_net ),
+ atp_sockaddr( atp )->sat_addr.s_node,
+ atp_sockaddr( atp )->sat_port, VERSION );
+
+ config->fd = atp_fileno(atp);
+ config->obj.handle = asp;
+ config->obj.config = config;
+ config->obj.proto = AFPPROTO_ASP;
+
+ memcpy(&config->obj.options, options, sizeof(struct afp_options));
+ config->optcount = refcount;
+ (*refcount)++;
+
+ config->server_start = asp_start;
+ config->server_cleanup = asp_cleanup;
+
+ return config;