~ubuntu-branches/ubuntu/dapper/xscreensaver/dapper

« back to all changes in this revision

Viewing changes to driver/setuid.c

  • Committer: Bazaar Package Importer
  • Author(s): Oliver Grawert
  • Date: 2005-10-11 21:00:42 UTC
  • mfrom: (2.1.1 sarge)
  • Revision ID: james.westby@ubuntu.com-20051011210042-u7q6zslgevdxspr3
Tags: 4.21-4ubuntu17
updated pt_BR again, fixed to UTF-8 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* setuid.c --- management of runtime privileges.
2
 
 * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski <jwz@jwz.org>
 
2
 * xscreensaver, Copyright (c) 1993-1998, 2005 Jamie Zawinski <jwz@jwz.org>
3
3
 *
4
4
 * Permission to use, copy, modify, distribute, and sell this software and its
5
5
 * documentation for any purpose is hereby granted without fee, provided that
41
41
  struct group *g = 0;
42
42
  p = getpwuid (uid);
43
43
  g = getgrgid (gid);
44
 
  sprintf (buf, "%s/%s (%ld/%ld)",
 
44
  sprintf (buf, "%.100s/%.100s (%ld/%ld)",
45
45
           (p && p->pw_name ? p->pw_name : "???"),
46
46
           (g && g->gr_name ? g->gr_name : "???"),
47
47
           (long) uid, (long) gid);
79
79
{
80
80
  int uid_errno = 0;
81
81
  int gid_errno = 0;
 
82
  int sgs_errno = 0;
82
83
  struct passwd *p = getpwuid (uid);
83
84
  struct group  *g = getgrgid (gid);
84
85
 
97
98
  if (uid == (uid_t) -1) uid = (uid_t) -2;
98
99
 
99
100
  errno = 0;
 
101
  if (setgroups (1, &gid) < 0)
 
102
    sgs_errno = errno ? errno : -1;
 
103
 
 
104
  errno = 0;
100
105
  if (setgid (gid) != 0)
101
106
    gid_errno = errno ? errno : -1;
102
107
 
104
109
  if (setuid (uid) != 0)
105
110
    uid_errno = errno ? errno : -1;
106
111
 
107
 
  if (uid_errno == 0 && gid_errno == 0)
 
112
  if (uid_errno == 0 && gid_errno == 0 && sgs_errno == 0)
108
113
    {
109
114
      static char buf [1024];
110
 
      sprintf (buf, "changed uid/gid to %s/%s (%ld/%ld).",
 
115
      sprintf (buf, "changed uid/gid to %.100s/%.100s (%ld/%ld).",
111
116
               (p && p->pw_name ? p->pw_name : "???"),
112
117
               (g && g->gr_name ? g->gr_name : "???"),
113
118
               (long) uid, (long) gid);
118
123
  else
119
124
    {
120
125
      char buf [1024];
 
126
      if (sgs_errno)
 
127
        {
 
128
          sprintf (buf, "%s: couldn't setgroups to %.100s (%ld)",
 
129
                   blurb(),
 
130
                   (g && g->gr_name ? g->gr_name : "???"),
 
131
                   (long) gid);
 
132
          if (sgs_errno == -1)
 
133
            fprintf(stderr, "%s: unknown error\n", buf);
 
134
          else
 
135
            {
 
136
              errno = sgs_errno;
 
137
              perror(buf);
 
138
            }
 
139
        }
 
140
 
121
141
      if (gid_errno)
122
142
        {
123
 
          sprintf (buf, "%s: couldn't set gid to %s (%ld)",
 
143
          sprintf (buf, "%s: couldn't set gid to %.100s (%ld)",
124
144
                   blurb(),
125
145
                   (g && g->gr_name ? g->gr_name : "???"),
126
146
                   (long) gid);
127
147
          if (gid_errno == -1)
128
148
            fprintf(stderr, "%s: unknown error\n", buf);
129
149
          else
130
 
            perror(buf);
 
150
            {
 
151
              errno = gid_errno;
 
152
              perror(buf);
 
153
            }
131
154
        }
132
155
 
133
156
      if (uid_errno)
134
157
        {
135
 
          sprintf (buf, "%s: couldn't set uid to %s (%ld)",
 
158
          sprintf (buf, "%s: couldn't set uid to %.100s (%ld)",
136
159
                   blurb(),
137
160
                   (p && p->pw_name ? p->pw_name : "???"),
138
161
                   (long) uid);
139
162
          if (uid_errno == -1)
140
163
            fprintf(stderr, "%s: unknown error\n", buf);
141
164
          else
142
 
            perror(buf);
 
165
            {
 
166
              errno = uid_errno;
 
167
              perror(buf);
 
168
            }
143
169
        }
144
170
 
145
171
      return -1;
263
289
        !strcmp (p->pw_name, "games"))
264
290
      {
265
291
        static char buf [1024];
266
 
        sprintf (buf, "running as %s",
 
292
        sprintf (buf, "running as %.100s",
267
293
                 (p && p->pw_name && *p->pw_name
268
294
                  ? p->pw_name : "<unknown>"));
269
295
        si->nolock_reason = buf;