Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 235330 | Differences between
and this patch

Collapse All | Expand All

(-)NetworkManager-0.7.0.orig/src/NetworkManagerPolicy.c (+34 lines)
Lines 24-29 Link Here
24
#include <errno.h>
24
#include <errno.h>
25
#include <netdb.h>
25
#include <netdb.h>
26
#include <ctype.h>
26
#include <ctype.h>
27
#include <regex.h>
27
28
28
#include "NetworkManagerPolicy.h"
29
#include "NetworkManagerPolicy.h"
29
#include "NetworkManagerUtils.h"
30
#include "NetworkManagerUtils.h"
Lines 332-337 Link Here
332
	g_string_free (new_contents, TRUE);
333
	g_string_free (new_contents, TRUE);
333
	return success;
334
	return success;
334
}
335
}
336
static char *findHostNameMatch(const char *inputString) {
337
	if(!inputString) return NULL;
338
        char pattern[50]="HOSTNAME[ ]*=[ \"]*([a-zA-z0-9]+)[\"]*";
339
        regmatch_t pmatch[2];
340
        int start=0, end=0;
341
        regex_t predicate;
342
        if(regcomp(&predicate, pattern, REG_EXTENDED) ||
343
                regexec(&predicate, inputString, 2, pmatch, 0) ||
344
                pmatch[1].rm_so < 0 || pmatch[1].rm_eo < 0 )
345
                return NULL;
346
        start=pmatch[1].rm_so;
347
        end=pmatch[1].rm_eo;
348
        if(start>=end || end > strlen(inputString) ) return NULL;
349
        return strndup(&inputString[start], end-start);
350
}
335
351
336
static void
352
static void
337
set_system_hostname (const char *new_hostname, const char *msg)
353
set_system_hostname (const char *new_hostname, const char *msg)
Lines 339-344 Link Here
339
	char old_hostname[HOST_NAME_MAX + 1];
355
	char old_hostname[HOST_NAME_MAX + 1];
340
	int ret = 0;
356
	int ret = 0;
341
	const char *name = new_hostname ? new_hostname : FALLBACK_HOSTNAME;
357
	const char *name = new_hostname ? new_hostname : FALLBACK_HOSTNAME;
358
       if (!new_hostname) {
359
               static char* sysconf_hostname = NULL;
360
               char *contents = NULL;
361
               gsize contents_len;
362
               GError *error = NULL;
363
               if (!sysconf_hostname && !g_file_get_contents (SYSCONFDIR "/conf.d/hostname", &contents, &contents_len, &error)) {
364
                       nm_warning ("%s: couldn't read " SYSCONFDIR "/conf.d/hostname: (%d) %s",
365
                                   __func__, error ? error->code : 0,
366
                                    (error && error->message) ? error->message : "(unknown)");
367
               } else if (!sysconf_hostname) {
368
                       sysconf_hostname = g_strstrip(contents);
369
		       sysconf_hostname = strstr(sysconf_hostname, "HOSTNAME");
370
                       sysconf_hostname = findHostNameMatch(sysconf_hostname);
371
               }
372
               if(sysconf_hostname)
373
                       name = sysconf_hostname;
374
       }
375
342
376
343
	old_hostname[HOST_NAME_MAX] = '\0';
377
	old_hostname[HOST_NAME_MAX] = '\0';
344
	errno = 0;
378
	errno = 0;

Return to bug 235330