uint16 _api_DosNetServerGetInfo(PCONN_HND phnd, io_struct * ps, uint16 sLevel, RCVBUF pbBuffer, RCVBUFLEN cbBuffer, uint16 *pcTotalAvail) { SERVER_INFO_1 sv1; DEBUG(10,("DosNetServerGetInfo: %d buf %d\n", sLevel, cbBuffer)); StrnCpy(sv1.sv1_name, local_machine, 16); strupper(sv1.sv1_name); sv1.sv1_version_major = 4; sv1.sv1_version_minor = 1; sv1.sv1_type = SV_TYPE_NT; sv1.sv1_comment_or_master_browser = string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH); switch (sLevel) { case 1: { if (!io_SERVER_INFO_1("sv1", ps, 0, &sv1, PARSE_SCALARS)) return NERR_BufTooSmall; if (!io_SERVER_INFO_1("sv1", ps, 0, &sv1, PARSE_OFFSETS)) return NERR_BufTooSmall; return ERRsuccess; } } return ERRunknownlevel; }
void announce_remote(time_t t) { char *s; const char *ptr; static time_t last_time = 0; pstring s2; struct in_addr addr; char *comment; int stype = lp_default_server_announce(); if (last_time && (t < (last_time + REMOTE_ANNOUNCE_INTERVAL))) return; last_time = t; s = lp_remote_announce(); if (!*s) return; comment = string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH); for (ptr=s; next_token(&ptr,s2,NULL,sizeof(s2)); ) { /* The entries are of the form a.b.c.d/WORKGROUP with WORKGROUP being optional */ const char *wgroup; char *pwgroup; int i; pwgroup = strchr_m(s2,'/'); if (pwgroup) *pwgroup++ = 0; if (!pwgroup || !*pwgroup) wgroup = lp_workgroup(); else wgroup = pwgroup; addr = *interpret_addr2(s2); /* Announce all our names including aliases */ /* Give the ip address as the address of our first broadcast subnet. */ for(i=0; my_netbios_names(i); i++) { const char *name = my_netbios_names(i); DEBUG(5,("announce_remote: Doing remote announce for server %s to IP %s.\n", name, inet_ntoa(addr) )); send_announcement(FIRST_SUBNET, ANN_HostAnnouncement, name, /* From nbt name. */ wgroup, 0x1d, /* To nbt name. */ addr, /* To ip. */ REMOTE_ANNOUNCE_INTERVAL, /* Time until next announce. */ name, /* Name to announce. */ stype, /* Type field. */ comment); } } }
static WERROR NetServerGetInfo_l_1005(struct libnetapi_ctx *ctx, uint8_t **buffer) { struct SERVER_INFO_1005 info1005; info1005.sv1005_comment = lp_serverstring(); *buffer = (uint8_t *)talloc_memdup(ctx, &info1005, sizeof(info1005)); if (!*buffer) { return WERR_NOMEM; } return WERR_OK; }
static WERROR NetServerGetInfo_l_101(struct libnetapi_ctx *ctx, uint8_t **buffer) { struct SERVER_INFO_101 i; i.sv101_platform_id = PLATFORM_ID_NT; i.sv101_name = global_myname(); i.sv101_version_major = lp_major_announce_version(); i.sv101_version_minor = lp_minor_announce_version(); i.sv101_type = lp_default_server_announce(); i.sv101_comment = lp_serverstring(); *buffer = (uint8_t *)talloc_memdup(ctx, &i, sizeof(i)); if (!*buffer) { return WERR_NOMEM; } return WERR_OK; }