#include #include #include #include void check_gss_have_cred_cache(const char *procname) { OM_uint32 major, minor; gss_cred_id_t cred = GSS_C_NO_CREDENTIAL; printf("before gss_acquire_cred in %s\n", procname); major = gss_acquire_cred(&minor, GSS_C_NO_NAME, 0, GSS_C_NO_OID_SET, GSS_C_INITIATE, &cred, NULL, NULL); printf("after gss_acquire_cred in %s\n", procname); printf("gss complete: %s\n", major == GSS_S_COMPLETE ? "true" : "false"); } int main() { // comment out the line below to get things to work(around) check_gss_have_cred_cache("main"); pid_t childpid = fork(); if (childpid == 0) { check_gss_have_cred_cache("child"); exit(0); } else if (childpid < 0) { printf("fork error\n"); } else { int status; wait(&status); if (WIFEXITED(status)) { printf("child exit code: %d\n", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("child signalled: %d\n", WTERMSIG(status)); } else { printf("unexpected wait status: %d\n", status); } } return 0; }