18290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <stdio.h>
28290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <stdlib.h>
38290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <string.h>
48290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <unistd.h>
58290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <errno.h>
68290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <selinux/selinux.h>
78290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley
88290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalleyint runcon_main(int argc, char **argv)
98290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley{
108290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    int rc;
118290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley
128290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    if (argc < 3) {
138290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley        fprintf(stderr, "usage:  %s context program args...\n", argv[0]);
148290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley        exit(1);
158290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    }
168290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley
178290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    rc = setexeccon(argv[1]);
188290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    if (rc < 0) {
198290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley        fprintf(stderr, "Could not set context to %s:  %s\n", argv[1], strerror(errno));
208290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley        exit(2);
218290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    }
228290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley
238290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    argv += 2;
248290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    argc -= 2;
258290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    execvp(argv[0], argv);
268290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    fprintf(stderr, "Could not exec %s:  %s\n", argv[0], strerror(errno));
278290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley    exit(3);
288290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley}
29