Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 601878
Collapse All | Expand All

(-)ConsoleKit2-1.1.0.orig/tools/ck-remove-directory.c (-16 / +28 lines)
Lines 46-52 Link Here
46
46
47
47
48
static void
48
static void
49
become_user (uid_t uid, const gchar* dest)
49
become_user (uid_t uid)
50
{
50
{
51
        int            res;
51
        int            res;
52
        struct passwd *pwent;
52
        struct passwd *pwent;
Lines 56-66 Link Here
56
                exit (1);
56
                exit (1);
57
        }
57
        }
58
58
59
        if (dest == NULL) {
60
                g_critical ("invalid dest");
61
                exit (1);
62
        }
63
64
        errno = 0;
59
        errno = 0;
65
        pwent = getpwuid (uid);
60
        pwent = getpwuid (uid);
66
        if (pwent == NULL) {
61
        if (pwent == NULL) {
Lines 70-86 Link Here
70
65
71
        /* set the group */
66
        /* set the group */
72
        errno = 0;
67
        errno = 0;
73
        res = setgid (pwent->pw_gid);
68
        res = setegid (pwent->pw_gid);
74
        if (res == -1) {
69
        if (res == -1) {
75
                g_warning ("Error performing setgid: %s", g_strerror (errno));
70
                g_warning ("Error performing setegid: %s", g_strerror (errno));
76
                exit (1);
71
                exit (1);
77
        }
72
        }
78
73
79
        /* become the user */
74
        /* become the user */
80
        errno = 0;
75
        errno = 0;
81
        res = setuid (uid);
76
        res = seteuid (uid);
82
        if (res == -1) {
77
        if (res == -1) {
83
                g_warning ("Error performing setuid: %s", g_strerror (errno));
78
                g_warning ("Error performing seteuid: %s", g_strerror (errno));
84
                exit (1);
79
                exit (1);
85
        }
80
        }
86
}
81
}
Lines 91-97 Link Here
91
           int                typeflag,
86
           int                typeflag,
92
           struct FTW        *ftwbuf)
87
           struct FTW        *ftwbuf)
93
{
88
{
94
        int ret = remove (fpath);
89
        int ret = ftwbuf->level > 0 ? remove (fpath) : 0;
95
90
96
        if (ret) {
91
        if (ret) {
97
                g_error ("Failed to remove %s, reason was: %s", fpath, strerror(errno));
92
                g_error ("Failed to remove %s, reason was: %s", fpath, strerror(errno));
Lines 104-110 Link Here
104
static int
99
static int
105
remove_dest_dir (const gchar *dest)
100
remove_dest_dir (const gchar *dest)
106
{
101
{
107
        return nftw(dest, unlink_cb, 64, FTW_DEPTH | FTW_PHYS);
102
        int ret;
103
104
				if (ret = nftw(dest, unlink_cb, 64, FTW_DEPTH | FTW_PHYS)) {
105
								return ret;
106
				}
107
108
				errno = 0;
109
				ret = seteuid (getuid ());
110
				if (ret == -1) {
111
								g_warning ("Error performing seteuid: %s", g_strerror (errno));
112
								exit (1);
113
				}
114
115
				ret = remove (dest);
116
				if (ret) {
117
								g_error ("Failed to remove %s, reason was: %s", dest, strerror (errno));
118
								errno = 0;
119
				}
120
121
				return ret;
108
}
122
}
109
123
110
int
124
int
Lines 161-169 Link Here
161
                exit (1);
175
                exit (1);
162
        }
176
        }
163
177
164
        become_user (user_id, dest);
178
				become_user (user_id);
165
166
        ret = remove_dest_dir (dest);
167
179
168
        return ret != TRUE;
180
        return remove_dest_dir (dest) == 0 ? 0 : 1;
169
}
181
}

Return to bug 601878