~ubuntu-branches/ubuntu/quantal/sudo/quantal

« back to all changes in this revision

Viewing changes to compat/unsetenv.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2011-11-20 12:07:45 UTC
  • mfrom: (1.3.17 sid)
  • Revision ID: package-import@ubuntu.com-20111120120745-o3qpklobmygytndc
Tags: 1.8.3p1-1ubuntu1
* Merge from debian/testing, remaining changes:
  - debian/patches/keep_home_by_default.patch:
    + Set HOME in initial_keepenv_table. (rebased for 1.8.3p1)
  - debian/patches/enable_badpass.patch: turn on "mail_badpass" by default:
    + attempting sudo without knowing a login password is as bad as not
      being listed in the sudoers file, especially if getting the password
      wrong means doing the access-check-email-notification never happens
      (rebased for 1.8.3p1)
  - debian/rules:
    + compile with --without-lecture --with-tty-tickets (Ubuntu specific)
    + install man/man8/sudo_root.8 (Ubuntu specific)
    + install apport hooks
    + The ubuntu-sudo-as-admin-successful.patch was taken upstream by
      Debian however it requires a --enable-admin-flag configure flag to
      actually enable it.
  - debian/sudoers: 
    + grant admin group sudo access
  - debian/sudo-ldap.dirs, debian/sudo.dirs: 
    + add usr/share/apport/package-hooks
  - debian/sudo.preinst:
    + avoid conffile prompt by checking for known default /etc/sudoers
      and if found installing the correct default /etc/sudoers file

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
 
3
 *
 
4
 * Permission to use, copy, modify, and distribute this software for any
 
5
 * purpose with or without fee is hereby granted, provided that the above
 
6
 * copyright notice and this permission notice appear in all copies.
 
7
 *
 
8
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 
9
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 
10
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 
11
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 
12
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 
13
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 
14
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
15
 */
 
16
 
 
17
#include <config.h>
 
18
 
 
19
#include <sys/types.h>
 
20
 
 
21
#include <stdio.h>
 
22
#ifdef STDC_HEADERS
 
23
# include <stdlib.h>
 
24
# include <stddef.h>
 
25
#else
 
26
# ifdef HAVE_STDLIB_H
 
27
#  include <stdlib.h>
 
28
# endif
 
29
#endif /* STDC_HEADERS */
 
30
#ifdef HAVE_STRING_H
 
31
# include <string.h>
 
32
#endif /* HAVE_STRING_H */
 
33
#ifdef HAVE_STRINGS_H
 
34
# include <strings.h>
 
35
#endif /* HAVE_STRINGS_H */
 
36
#include <errno.h>
 
37
 
 
38
#include "missing.h"
 
39
 
 
40
extern char **environ;  /* global environment */
 
41
 
 
42
#ifdef UNSETENV_VOID
 
43
void
 
44
#else
 
45
int
 
46
#endif
 
47
unsetenv(const char *var)
 
48
{
 
49
    char **ep = environ;
 
50
    size_t len;
 
51
 
 
52
    if (var == NULL || *var == '\0' || strchr(var, '=') != NULL) {
 
53
        errno = EINVAL;
 
54
#ifdef UNSETENV_VOID
 
55
        return;
 
56
#else
 
57
        return -1;
 
58
#endif
 
59
    }
 
60
 
 
61
    len = strlen(var);
 
62
    while (*ep != NULL) {
 
63
        if (strncmp(var, *ep, len) == 0 && (*ep)[len] == '=') {
 
64
            /* Found it; shift remainder + NULL over by one. */
 
65
            char **cur = ep;
 
66
            while ((*cur = *(cur + 1)) != NULL)
 
67
                cur++;
 
68
            /* Keep going, could be multiple instances of the var. */
 
69
        } else {
 
70
            ep++;
 
71
        }
 
72
    }
 
73
#ifndef UNSETENV_VOID
 
74
    return 0;
 
75
#endif
 
76
}