~ubuntu-branches/debian/sid/rlinetd/sid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>

#include <pwd.h>

#include <port/port.h>

#include "data.h"
#include "db.h"
#include "error.h"

void numlist_add(struct numlist **list, long num) {
	struct numlist *tmp = (struct numlist *)malloc(sizeof(*tmp));

	if(!tmp)
		rl_fatal(EX_SOFTWARE, _("ABORT - Can't allocate memory"));
	tmp->next = *list;
	tmp->num = num;
	*list = tmp;
}

void numlist_copy(struct numlist **to, struct numlist *from) {
	while(from) {
		numlist_add(to, from->num);
		from = from->next;
	}
}

void numlist_free(struct numlist *n) {
	struct numlist *p;
	
	while(n) {
		p = n->next;
		free(n);
		n = p;
	}
}

void stringlist_add(struct stringlist **list, char *str) {
	struct stringlist *tmp = (struct stringlist *)malloc(sizeof(*tmp));

	if(!tmp)
		rl_fatal(EX_SOFTWARE, _("ABORT - Can't allocate memory"));
	tmp->next = *list;
	tmp->str = str;
	*list = tmp;
}

void stringlist_copy(struct stringlist **to, struct stringlist *from) {
	while(from) {
		stringlist_add(to, strdup(from->str));
		from = from->next;
	}
}

void stringlist_free(struct stringlist *n) {
	struct stringlist *p;

	while(n) {
		p = n->next;
		if(n->str)
			free(n->str);
		free(n);
		n = p;
	}
}

void builduserdata(struct userdata **dest, char *name) {
	struct passwd pw;
	struct passwd *pp;

	pp = &pw;
	pp = getpwnam(name);
	endpwent();
	if(!pp)
		return;
	clearuserdata(dest);
	(*dest)->name = name;
	(*dest)->uid = pp->pw_uid;
	(*dest)->gid = pp->pw_gid;
}	

void clearuserdata(struct userdata **dest) {
	if(!*dest)
		return;
	if((*dest)->name)
		free((*dest)->name);
	memset(*dest, 0, sizeof(**dest));
	(*dest)->uid = -1;
	(*dest)->gid = -1;
}

void newuserdata(struct userdata **dest) {
	if(!*dest)
		*dest = (struct userdata *)malloc(sizeof(**dest));
	if(!*dest)
		rl_fatal(EX_SOFTWARE, _("ABORT - Can't allocate memory"));
	memset(*dest, 0, sizeof(**dest));
	(*dest)->uid = -1;
	(*dest)->gid = -1;
}

void userdata_copy(struct userdata **to, struct userdata *from) {
	if(!from)
		return;
	newuserdata(to);
	memcpy(*to, from, sizeof(**to));
	(*to)->name = from->name ? strdup(from->name) : NULL;
}


/* vim: set ts=2: */