~ubuntu-branches/ubuntu/saucy/sudo/saucy

« back to all changes in this revision

Viewing changes to plugins/sudoers/set_perms.c

  • Committer: Package Import Robot
  • Author(s): Stéphane Graber
  • Date: 2012-11-16 09:31:32 UTC
  • mfrom: (1.4.13)
  • Revision ID: package-import@ubuntu.com-20121116093132-ptext55adlzbrq6y
Tags: 1.8.6p3-0ubuntu1
* New upstream release (1.8.6p3).
* Add patch to fix building with sssd when ldap is disabled.
* Drop sudo.manpages and sudo-ldap.manpages as the upstream build system
  now does the right thing here.
* Build the main sudo package with support for sssd, this doesn't add any
  additional build time or runtime dependency. sudo will dynamically load
  the sssd library if 'sss' is listed for the 'sudoers' nss service.

Show diffs side-by-side

added added

removed removed

Lines of Context:
91
91
 
92
92
    while (perm_stack_depth > 1)
93
93
        restore_perms();
94
 
    grlist_delref(perm_stack[0].grlist);
 
94
    sudo_grlist_delref(perm_stack[0].grlist);
95
95
 
96
96
    debug_return;
97
97
}
157
157
        state->sgid = state->egid; /* in case we are setgid */
158
158
#endif
159
159
        state->grlist = user_group_list;
160
 
        grlist_addref(state->grlist);
 
160
        sudo_grlist_addref(state->grlist);
161
161
        sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
162
162
            "ruid: %d, euid: %d, suid: %d, rgid: %d, egid: %d, sgid: %d",
163
163
            __func__, (int)state->ruid, (int)state->euid, (int)state->suid,
182
182
        state->egid = ostate->egid;
183
183
        state->sgid = ostate->sgid;
184
184
        state->grlist = ostate->grlist;
185
 
        grlist_addref(state->grlist);
 
185
        sudo_grlist_addref(state->grlist);
186
186
        break;
187
187
 
188
188
    case PERM_USER:
199
199
            goto bad;
200
200
        }
201
201
        state->grlist = user_group_list;
202
 
        grlist_addref(state->grlist);
 
202
        sudo_grlist_addref(state->grlist);
203
203
        if (state->grlist != ostate->grlist) {
204
204
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
205
205
                strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
236
236
            goto bad;
237
237
        }
238
238
        state->grlist = user_group_list;
239
 
        grlist_addref(state->grlist);
 
239
        sudo_grlist_addref(state->grlist);
240
240
        if (state->grlist != ostate->grlist) {
241
241
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
242
242
                strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
286
286
 
287
287
    case PERM_SUDOERS:
288
288
        state->grlist = ostate->grlist;
289
 
        grlist_addref(state->grlist);
 
289
        sudo_grlist_addref(state->grlist);
290
290
 
291
291
        /* assumes euid == ROOT_UID, ruid == user */
292
292
        state->rgid = ostate->rgid;
326
326
 
327
327
    case PERM_TIMESTAMP:
328
328
        state->grlist = ostate->grlist;
329
 
        grlist_addref(state->grlist);
 
329
        sudo_grlist_addref(state->grlist);
330
330
        state->rgid = ostate->rgid;
331
331
        state->egid = ostate->egid;
332
332
        state->sgid = ostate->sgid;
403
403
            goto bad;
404
404
        }
405
405
    }
406
 
    grlist_delref(state->grlist);
 
406
    sudo_grlist_delref(state->grlist);
407
407
    debug_return;
408
408
 
409
409
bad:
458
458
        state->egid = getgidx(ID_EFFECTIVE);
459
459
        state->sgid = getgidx(ID_SAVED);
460
460
        state->grlist = user_group_list;
461
 
        grlist_addref(state->grlist);
 
461
        sudo_grlist_addref(state->grlist);
462
462
        sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
463
463
            "ruid: %d, euid: %d, suid: %d, rgid: %d, egid: %d, sgid: %d",
464
464
            __func__, (unsigned int)state->ruid, (unsigned int)state->euid,
484
484
        state->egid = ostate->egid;
485
485
        state->sgid = ostate->sgid;
486
486
        state->grlist = ostate->grlist;
487
 
        grlist_addref(state->grlist);
 
487
        sudo_grlist_addref(state->grlist);
488
488
        break;
489
489
 
490
490
    case PERM_USER:
501
501
            goto bad;
502
502
        }
503
503
        state->grlist = user_group_list;
504
 
        grlist_addref(state->grlist);
 
504
        sudo_grlist_addref(state->grlist);
505
505
        if (state->grlist != ostate->grlist) {
506
506
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
507
507
                strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
546
546
            goto bad;
547
547
        }
548
548
        state->grlist = user_group_list;
549
 
        grlist_addref(state->grlist);
 
549
        sudo_grlist_addref(state->grlist);
550
550
        if (state->grlist != ostate->grlist) {
551
551
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
552
552
                strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
596
596
 
597
597
    case PERM_SUDOERS:
598
598
        state->grlist = ostate->grlist;
599
 
        grlist_addref(state->grlist);
 
599
        sudo_grlist_addref(state->grlist);
600
600
 
601
601
        /* assume euid == ROOT_UID, ruid == user */
602
602
        state->rgid = ostate->rgid;
645
645
 
646
646
    case PERM_TIMESTAMP:
647
647
        state->grlist = ostate->grlist;
648
 
        grlist_addref(state->grlist);
 
648
        sudo_grlist_addref(state->grlist);
649
649
        state->rgid = ostate->rgid;
650
650
        state->egid = ostate->egid;
651
651
        state->sgid = ostate->sgid;
795
795
            goto bad;
796
796
        }
797
797
    }
798
 
    grlist_delref(state->grlist);
 
798
    sudo_grlist_delref(state->grlist);
799
799
    debug_return;
800
800
 
801
801
bad:
848
848
        state->rgid = getgid();
849
849
        state->egid = getegid();
850
850
        state->grlist = user_group_list;
851
 
        grlist_addref(state->grlist);
 
851
        sudo_grlist_addref(state->grlist);
852
852
        sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
853
853
            "ruid: %d, euid: %d, rgid: %d, egid: %d", __func__,
854
854
            (int)state->ruid, (int)state->euid,
881
881
        state->rgid = ostate->rgid;
882
882
        state->egid = ostate->rgid;
883
883
        state->grlist = ostate->grlist;
884
 
        grlist_addref(state->grlist);
 
884
        sudo_grlist_addref(state->grlist);
885
885
        break;
886
886
 
887
887
    case PERM_USER:
896
896
            goto bad;
897
897
        }
898
898
        state->grlist = user_group_list;
899
 
        grlist_addref(state->grlist);
 
899
        sudo_grlist_addref(state->grlist);
900
900
        if (state->grlist != ostate->grlist) {
901
901
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
902
902
                strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
928
928
            goto bad;
929
929
        }
930
930
        state->grlist = user_group_list;
931
 
        grlist_addref(state->grlist);
 
931
        sudo_grlist_addref(state->grlist);
932
932
        if (state->grlist != ostate->grlist) {
933
933
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
934
934
                strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
971
971
 
972
972
    case PERM_SUDOERS:
973
973
        state->grlist = ostate->grlist;
974
 
        grlist_addref(state->grlist);
 
974
        sudo_grlist_addref(state->grlist);
975
975
 
976
976
        /* assume euid == ROOT_UID, ruid == user */
977
977
        state->rgid = ostate->rgid;
1006
1006
 
1007
1007
    case PERM_TIMESTAMP:
1008
1008
        state->grlist = ostate->grlist;
1009
 
        grlist_addref(state->grlist);
 
1009
        sudo_grlist_addref(state->grlist);
1010
1010
        state->rgid = ostate->rgid;
1011
1011
        state->egid = ostate->egid;
1012
1012
        state->ruid = ROOT_UID;
1082
1082
            goto bad;
1083
1083
        }
1084
1084
    }
1085
 
    grlist_delref(state->grlist);
 
1085
    sudo_grlist_delref(state->grlist);
1086
1086
    debug_return;
1087
1087
 
1088
1088
bad:
1150
1150
        state->rgid = getgid();
1151
1151
        state->egid = getegid();
1152
1152
        state->grlist = user_group_list;
1153
 
        grlist_addref(state->grlist);
 
1153
        sudo_grlist_addref(state->grlist);
1154
1154
        sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
1155
1155
            "ruid: %d, euid: %d, rgid: %d, egid: %d", __func__,
1156
1156
            (int)state->ruid, (int)state->euid,
1167
1167
        state->rgid = ostate->rgid;
1168
1168
        state->egid = ostate->egid;
1169
1169
        state->grlist = ostate->grlist;
1170
 
        grlist_addref(state->grlist);
 
1170
        sudo_grlist_addref(state->grlist);
1171
1171
        break;
1172
1172
 
1173
1173
    case PERM_USER:
1182
1182
            goto bad;
1183
1183
        }
1184
1184
        state->grlist = user_group_list;
1185
 
        grlist_addref(state->grlist);
 
1185
        sudo_grlist_addref(state->grlist);
1186
1186
        if (state->grlist != ostate->grlist) {
1187
1187
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
1188
1188
                strlcpy(errbuf, "PERM_USER: setgroups", sizeof(errbuf));
1214
1214
            goto bad;
1215
1215
        }
1216
1216
        state->grlist = user_group_list;
1217
 
        grlist_addref(state->grlist);
 
1217
        sudo_grlist_addref(state->grlist);
1218
1218
        if (state->grlist != ostate->grlist) {
1219
1219
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
1220
1220
                strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
1257
1257
 
1258
1258
    case PERM_SUDOERS:
1259
1259
        state->grlist = ostate->grlist;
1260
 
        grlist_addref(state->grlist);
 
1260
        sudo_grlist_addref(state->grlist);
1261
1261
 
1262
1262
        /* assume euid == ROOT_UID, ruid == user */
1263
1263
        state->rgid = ostate->rgid;
1292
1292
 
1293
1293
    case PERM_TIMESTAMP:
1294
1294
        state->grlist = ostate->grlist;
1295
 
        grlist_addref(state->grlist);
 
1295
        sudo_grlist_addref(state->grlist);
1296
1296
        state->rgid = ostate->rgid;
1297
1297
        state->egid = ostate->egid;
1298
1298
        state->ruid = ROOT_UID;
1367
1367
        warning("seteuid(%d)", ostate->euid);
1368
1368
        goto bad;
1369
1369
    }
1370
 
    grlist_delref(state->grlist);
 
1370
    sudo_grlist_delref(state->grlist);
1371
1371
    debug_return;
1372
1372
 
1373
1373
bad:
1414
1414
        state->ruid = geteuid() == ROOT_UID ? ROOT_UID : getuid();
1415
1415
        state->rgid = getgid();
1416
1416
        state->grlist = user_group_list;
1417
 
        grlist_addref(state->grlist);
 
1417
        sudo_grlist_addref(state->grlist);
1418
1418
        sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_INITIAL: "
1419
1419
            "ruid: %d, rgid: %d", __func__, (int)state->ruid, (int)state->rgid);
1420
1420
        break;
1423
1423
        state->ruid = ROOT_UID;
1424
1424
        state->rgid = ostate->rgid;
1425
1425
        state->grlist = ostate->grlist;
1426
 
        grlist_addref(state->grlist);
 
1426
        sudo_grlist_addref(state->grlist);
1427
1427
        sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_ROOT: uid: "
1428
1428
            "[%d] -> [%d]", __func__, (int)ostate->ruid, (int)state->ruid);
1429
1429
        if (setuid(ROOT_UID)) {
1438
1438
            "[%d] -> [%d]", __func__, (int)ostate->rgid, (int)state->rgid);
1439
1439
        (void) setgid(user_gid);
1440
1440
        state->grlist = user_group_list;
1441
 
        grlist_addref(state->grlist);
 
1441
        sudo_grlist_addref(state->grlist);
1442
1442
        if (state->grlist != ostate->grlist) {
1443
1443
            if (sudo_setgroups(state->grlist->ngids, state->grlist->gids)) {
1444
1444
                strlcpy(errbuf, "PERM_FULL_USER: setgroups", sizeof(errbuf));
1463
1463
        state->ruid = ostate->ruid;
1464
1464
        state->rgid = ostate->rgid;
1465
1465
        state->grlist = ostate->grlist;
1466
 
        grlist_addref(state->grlist);
 
1466
        sudo_grlist_addref(state->grlist);
1467
1467
        break;
1468
1468
    }
1469
1469
 
1505
1505
            goto bad;
1506
1506
        }
1507
1507
    }
1508
 
    grlist_delref(state->grlist);
 
1508
    sudo_grlist_delref(state->grlist);
1509
1509
    if (OID(ruid) != -1 && setuid(ostate->ruid)) {
1510
1510
        warning("setuid(%d)", (int)ostate->ruid);
1511
1511
        goto bad;
1526
1526
    debug_decl(runas_setgroups, SUDO_DEBUG_PERMS)
1527
1527
 
1528
1528
    if (def_preserve_groups) {
1529
 
        grlist_addref(user_group_list);
 
1529
        sudo_grlist_addref(user_group_list);
1530
1530
        debug_return_ptr(user_group_list);
1531
1531
    }
1532
1532
 
1534
1534
#ifdef HAVE_SETAUTHDB
1535
1535
    aix_setauthdb(pw->pw_name);
1536
1536
#endif
1537
 
    grlist = get_group_list(pw);
 
1537
    grlist = sudo_get_grlist(pw);
1538
1538
#ifdef HAVE_SETAUTHDB
1539
1539
    aix_restoreauthdb();
1540
1540
#endif