bool init_names(void) { int n; if (!set_netbios_aliases(lp_netbios_aliases())) { DEBUG( 0, ( "init_names: malloc fail.\n" ) ); return False; } set_local_machine_name(lp_netbios_name(),false); DEBUG( 5, ("Netbios name list:-\n") ); for( n=0; my_netbios_names(n); n++ ) { DEBUGADD( 5, ("my_netbios_names[%d]=\"%s\"\n", n, my_netbios_names(n) ) ); } return( True ); }
/* * Check server_name is: * - "" , functions that don't allow "", * should check that on their own, before calling this function * - our name (only netbios yet, TODO: need to test dns name!) * - our ip address of the current use socket * otherwise return WERR_INVALID_PRINTER_NAME */ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, const char *server_name) { bool ret; struct socket_address *myaddr; const char **aliases; int i; /* NULL is ok */ if (!server_name) return WERR_OK; /* "" is ok */ ret = strequal("",server_name); if (ret) return WERR_OK; /* just "\\" is invalid */ if (strequal("\\\\", server_name)) { return WERR_INVALID_PRINTER_NAME; } /* then we need "\\" */ if (strncmp("\\\\", server_name, 2) != 0) { return WERR_INVALID_PRINTER_NAME; } server_name += 2; /* NETBIOS NAME is ok */ ret = strequal(lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx), server_name); if (ret) return WERR_OK; aliases = lp_netbios_aliases(dce_call->conn->dce_ctx->lp_ctx); for (i=0; aliases && aliases[i]; i++) { if (strequal(aliases[i], server_name)) { return WERR_OK; } } /* DNS NAME is ok * TODO: we need to check if aliases are also ok */ if (lp_realm(dce_call->conn->dce_ctx->lp_ctx)) { char *str; str = talloc_asprintf(mem_ctx, "%s.%s", lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx), lp_realm(dce_call->conn->dce_ctx->lp_ctx)); W_ERROR_HAVE_NO_MEMORY(str); ret = strequal(str, server_name); talloc_free(str); if (ret) return WERR_OK; } myaddr = dcesrv_connection_get_my_addr(dce_call->conn, mem_ctx); W_ERROR_HAVE_NO_MEMORY(myaddr); ret = strequal(myaddr->addr, server_name); talloc_free(myaddr); if (ret) return WERR_OK; return WERR_INVALID_PRINTER_NAME; }