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);
        }
    }
}
示例#2
0
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;
}
示例#3
0
/* This hardcoded value should go into a ldb database! */
_PUBLIC_ uint32_t dcesrv_common_get_server_type(TALLOC_CTX *mem_ctx, struct dcesrv_context *dce_ctx)
{
	return lp_default_server_announce();
}