-
-#ifdef USE_SRVLOC
- dsi->srvloc_url[0] = '\0'; /* Mark that we haven't registered. */
- if (!(options->flags & OPTION_NOSLP)) {
- SLPError err;
- SLPError callbackerr;
- SLPHandle hslp;
- unsigned int afp_port;
- int l;
- char *srvloc_hostname;
- const char *hostname;
-
- err = SLPOpen("en", SLP_FALSE, &hslp);
- if (err != SLP_OK) {
- LOG(log_error, logtype_afpd, "DSIConfigInit: Error opening SRVLOC handle");
- goto srvloc_reg_err;
- }
-
- /* XXX We don't want to tack on the port number if we don't have to.
- * Why?
- * Well, this seems to break MacOS < 10. If the user _really_ wants to
- * use a non-default port, they can, but be aware, this server might
- * not show up int the Network Browser.
- */
- afp_port = getip_port((struct sockaddr *)&dsi->server);
- /* If specified use the FQDN to register with srvloc, otherwise use IP. */
- p = NULL;
- if (options->fqdn) {
- hostname = options->fqdn;
- p = strchr(hostname, ':');
- }
- else
- hostname = getip_string((struct sockaddr *)&dsi->server);
-
- srvloc_hostname = srvloc_encode(options, (options->server ? options->server : options->hostname));
-
- if ((p) || afp_port == 548) {
- l = snprintf(dsi->srvloc_url, sizeof(dsi->srvloc_url), "afp://%s/?NAME=%s", hostname, srvloc_hostname);
- }
- else {
- l = snprintf(dsi->srvloc_url, sizeof(dsi->srvloc_url), "afp://%s:%d/?NAME=%s", hostname, afp_port, srvloc_hostname);
- }
-
- if (l == -1 || l >= (int)sizeof(dsi->srvloc_url)) {
- LOG(log_error, logtype_afpd, "DSIConfigInit: Hostname is too long for SRVLOC");
- dsi->srvloc_url[0] = '\0';
- goto srvloc_reg_err;
- }
-
- err = SLPReg(hslp,
- dsi->srvloc_url,
- SLP_LIFETIME_MAXIMUM,
- "afp",
- "",
- SLP_TRUE,
- SRVLOC_callback,
- &callbackerr);
- if (err != SLP_OK) {
- LOG(log_error, logtype_afpd, "DSIConfigInit: Error registering %s with SRVLOC", dsi->srvloc_url);
- dsi->srvloc_url[0] = '\0';
- goto srvloc_reg_err;
- }
-
- if (callbackerr != SLP_OK) {
- LOG(log_error, logtype_afpd, "DSIConfigInit: Error in callback trying to register %s with SRVLOC", dsi->srvloc_url);
- dsi->srvloc_url[0] = '\0';
- goto srvloc_reg_err;
- }
-
- LOG(log_info, logtype_afpd, "Sucessfully registered %s with SRVLOC", dsi->srvloc_url);
- config->server_cleanup = dsi_cleanup;
-
-srvloc_reg_err:
- SLPClose(hslp);