IdentityData_t *id_create (Identity_t id, DDS_ReturnCode_t *ret) { IdentityData_t *p; unsigned h; p = id_lookup (id, &h); if (p) { *ret = DDS_RETCODE_OK; return (p); } p = id_new (id); if (!p) { *ret = DDS_RETCODE_OUT_OF_RESOURCES; return (NULL); } id_add (p, h); return (p); }
static struct nodeID *id_lookup_dup(socketID_handle target) { return nodeid_dup(*id_lookup(target)); }
void id_release (Identity_t id) { unsigned h; id_free (id_lookup (id, &h)); }
eight_bits #line 317 "./cwebdir/ctang-w2c.ch" get_next P1H(void) #line 903 "./cwebdir/ctangle.w" { static int preprocessing= 0; eight_bits c; while(1){ if(loc> limit){ if(preprocessing&&*(limit-1)!='\\')preprocessing= 0; if(get_line()==0)return(new_section); else if(print_where&&!no_where){ print_where= 0; /*76:*/ #line 1225 "./cwebdir/ctangle.w" store_two_bytes(0150000); if(changing)id_first= change_file_name; else id_first= cur_file_name; id_loc= id_first+strlen(id_first); if(changing)store_two_bytes((sixteen_bits)change_line); else store_two_bytes((sixteen_bits)cur_line); {int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200); app_repl(a%0400);} /*:76*/ #line 912 "./cwebdir/ctangle.w" ; } else return('\n'); } c= *loc; if(comment_continues||(c=='/'&&(*(loc+1)=='*'||*(loc+1)=='/'))){ skip_comment(comment_continues||*(loc+1)=='*'); if(comment_continues)return('\n'); else continue; } loc++; if(xisdigit(c)||c=='.')/*65:*/ #line 978 "./cwebdir/ctangle.w" { id_first= loc-1; if(*id_first=='.'&&!xisdigit(*loc))goto mistake; if(*id_first=='0'){ if(*loc=='x'||*loc=='X'){ loc++;while(xisxdigit(*loc))loc++;goto found; } } while(xisdigit(*loc))loc++; if(*loc=='.'){ loc++; while(xisdigit(*loc))loc++; } if(*loc=='e'||*loc=='E'){ if(*++loc=='+'||*loc=='-')loc++; while(xisdigit(*loc))loc++; } found:while(*loc=='u'||*loc=='U'||*loc=='l'||*loc=='L' ||*loc=='f'||*loc=='F')loc++; id_loc= loc; return(constant); } /*:65*/ #line 924 "./cwebdir/ctangle.w" else if(c=='\''||c=='"'||(c=='L'&&(*loc=='\''||*loc=='"'))) /*66:*/ #line 1006 "./cwebdir/ctangle.w" { char delim= c; id_first= section_text+1; id_loc= section_text;*++id_loc= delim; if(delim=='L'){ delim= *loc++;*++id_loc= delim; } while(1){ if(loc>=limit){ if(*(limit-1)!='\\'){ err_print("! String didn't end");loc= limit;break; } if(get_line()==0){ err_print("! Input ended in middle of string");loc= buffer;break; } else if(++id_loc<=section_text_end)*id_loc= '\n'; } if((c= *loc++)==delim){ if(++id_loc<=section_text_end)*id_loc= c; break; } if(c=='\\'){ if(loc>=limit)continue; if(++id_loc<=section_text_end)*id_loc= '\\'; c= *loc++; } if(++id_loc<=section_text_end)*id_loc= c; } if(id_loc>=section_text_end){ printf("\n! String too long: "); term_write(section_text+1,25); err_print("..."); } id_loc++; return(string); } /*:66*/ #line 926 "./cwebdir/ctangle.w" else if(isalpha(c)||isxalpha(c)||ishigh(c)) /*64:*/ #line 972 "./cwebdir/ctangle.w" { id_first= --loc; while(isalpha(*++loc)||isdigit(*loc)||isxalpha(*loc)||ishigh(*loc)); id_loc= loc;return(identifier); } /*:64*/ #line 928 "./cwebdir/ctangle.w" else if(c=='@')/*67:*/ #line 1050 "./cwebdir/ctangle.w" { c= ccode[(eight_bits)*loc++]; switch(c){ case ignore:continue; case translit_code:err_print("! Use @l in limbo only");continue; case control_text:while((c= skip_ahead())=='@'); if(*(loc-1)!='>') err_print("! Double @ should be used in control text"); continue; case section_name: cur_section_name_char= *(loc-1); /*69:*/ #line 1098 "./cwebdir/ctangle.w" { char*k; /*71:*/ #line 1118 "./cwebdir/ctangle.w" k= section_text; while(1){ if(loc> limit&&get_line()==0){ err_print("! Input ended in section name"); loc= buffer+1;break; } c= *loc; /*72:*/ #line 1142 "./cwebdir/ctangle.w" if(c=='@'){ c= *(loc+1); if(c=='>'){ loc+= 2;break; } if(ccode[(eight_bits)c]==new_section){ err_print("! Section name didn't end");break; } if(ccode[(eight_bits)c]==section_name){ err_print("! Nesting of section names not allowed");break; } *(++k)= '@';loc++; } /*:72*/ #line 1127 "./cwebdir/ctangle.w" ; loc++;if(k<section_text_end)k++; if(xisspace(c)){ c= ' ';if(*(k-1)==' ')k--; } *k= c; } if(k>=section_text_end){ printf("\n! Section name too long: "); term_write(section_text+1,25); printf("...");mark_harmless; } if(*k==' '&&k> section_text)k--; /*:71*/ #line 1100 "./cwebdir/ctangle.w" ; if(k-section_text> 3&&strncmp(k-2,"...",3)==0) cur_section_name= section_lookup(section_text+1,k-3,1); else cur_section_name= section_lookup(section_text+1,k,0); if(cur_section_name_char=='(') /*39:*/ #line 516 "./cwebdir/ctangle.w" { for(an_output_file= cur_out_file; an_output_file<end_output_files;an_output_file++) if(*an_output_file==cur_section_name)break; if(an_output_file==end_output_files){ if(cur_out_file> output_files) *--cur_out_file= cur_section_name; else{ overflow("output files"); } } } /*:39*/ #line 1106 "./cwebdir/ctangle.w" ; return(section_name); } /*:69*/ #line 1064 "./cwebdir/ctangle.w" ; case string:/*73:*/ #line 1164 "./cwebdir/ctangle.w" { id_first= loc++;*(limit+1)= '@';*(limit+2)= '>'; while(*loc!='@'||*(loc+1)!='>')loc++; if(loc>=limit)err_print("! Verbatim string didn't end"); id_loc= loc;loc+= 2; return(string); } /*:73*/ #line 1065 "./cwebdir/ctangle.w" ; case ord:/*68:*/ #line 1077 "./cwebdir/ctangle.w" id_first= loc; if(*loc=='\\'){ if(*++loc=='\'')loc++; } while(*loc!='\''){ if(*loc=='@'){ if(*(loc+1)!='@') err_print("! Double @ should be used in ASCII constant"); else loc++; } loc++; if(loc> limit){ err_print("! String didn't end");loc= limit-1;break; } } loc++; return(ord); /*:68*/ #line 1066 "./cwebdir/ctangle.w" ; default:return(c); } } /*:67*/ #line 929 "./cwebdir/ctangle.w" else if(xisspace(c)){ if(!preprocessing||loc> limit)continue; else return(' '); } else if(c=='#'&&loc==buffer+1)preprocessing= 1; mistake:/*63:*/ #line 950 "./cwebdir/ctangle.w" switch(c){ case'+':if(*loc=='+')compress(plus_plus);break; case'-':if(*loc=='-'){compress(minus_minus);} else if(*loc=='>')if(*(loc+1)=='*'){loc++;compress(minus_gt_ast);} else compress(minus_gt);break; case'.':if(*loc=='*'){compress(period_ast);} else if(*loc=='.'&&*(loc+1)=='.'){ loc++;compress(dot_dot_dot); } break; case':':if(*loc==':')compress(colon_colon);break; case'=':if(*loc=='=')compress(eq_eq);break; case'>':if(*loc=='='){compress(gt_eq);} else if(*loc=='>')compress(gt_gt);break; case'<':if(*loc=='='){compress(lt_eq);} else if(*loc=='<')compress(lt_lt);break; case'&':if(*loc=='&')compress(and_and);break; case'|':if(*loc=='|')compress(or_or);break; case'!':if(*loc=='=')compress(not_eq);break; } /*:63*/ #line 936 "./cwebdir/ctangle.w" return(c); } }
void #line 334 "./cwebdir/ctang-w2c.ch" scan_section P1H(void) #line 1360 "./cwebdir/ctangle.w" { name_pointer p; text_pointer q; sixteen_bits a; section_count++;no_where= 1; if(*(loc-1)=='*'&&show_progress){ printf("*%d",section_count);update_terminal; } next_control= 0; while(1){ /*83:*/ #line 1396 "./cwebdir/ctangle.w" while(next_control<definition) if((next_control= skip_ahead())==section_name){ loc-= 2;next_control= get_next(); } /*:83*/ #line 1371 "./cwebdir/ctangle.w" ; if(next_control==definition){ /*84:*/ #line 1403 "./cwebdir/ctangle.w" { while((next_control= get_next())=='\n'); if(next_control!=identifier){ err_print("! Definition flushed, must start with identifier"); continue; } app_repl(((a= id_lookup(id_first,id_loc,0)-name_dir)/0400)+0200); app_repl(a%0400); if(*loc!='('){ app_repl(string);app_repl(' ');app_repl(string); } scan_repl(macro); cur_text->text_link= 0; } /*:84*/ #line 1373 "./cwebdir/ctangle.w" continue; } if(next_control==begin_C){ p= name_dir;break; } if(next_control==section_name){ p= cur_section_name; /*85:*/ #line 1428 "./cwebdir/ctangle.w" while((next_control= get_next())=='+'); if(next_control!='='&&next_control!=eq_eq) continue; /*:85*/ #line 1381 "./cwebdir/ctangle.w" ; break; } return; } no_where= print_where= 0; /*86:*/ #line 1433 "./cwebdir/ctangle.w" /*87:*/ #line 1438 "./cwebdir/ctangle.w" store_two_bytes((sixteen_bits)(0150000+section_count)); /*:87*/ #line 1434 "./cwebdir/ctangle.w" ; scan_repl(section_name); /*88:*/ #line 1442 "./cwebdir/ctangle.w" if(p==name_dir||p==0){ (last_unnamed)->text_link= cur_text-text_info;last_unnamed= cur_text; } else if(p->equiv==(char*)text_info)p->equiv= (char*)cur_text; else{ q= (text_pointer)p->equiv; while(q->text_link<section_flag) q= q->text_link+text_info; q->text_link= cur_text-text_info; } cur_text->text_link= section_flag; /*:88*/ #line 1436 "./cwebdir/ctangle.w" ; /*:86*/ #line 1387 "./cwebdir/ctangle.w" ; }
void #line 326 "./cwebdir/ctang-w2c.ch" scan_repl P1C(eight_bits,t) #line 1203 "./cwebdir/ctangle.w" { sixteen_bits a; if(t==section_name){/*76:*/ #line 1225 "./cwebdir/ctangle.w" store_two_bytes(0150000); if(changing)id_first= change_file_name; else id_first= cur_file_name; id_loc= id_first+strlen(id_first); if(changing)store_two_bytes((sixteen_bits)change_line); else store_two_bytes((sixteen_bits)cur_line); {int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200); app_repl(a%0400);} /*:76*/ #line 1205 "./cwebdir/ctangle.w" ;} while(1)switch(a= get_next()){ /*77:*/ #line 1235 "./cwebdir/ctangle.w" case identifier:a= id_lookup(id_first,id_loc,0)-name_dir; app_repl((a/0400)+0200); app_repl(a%0400);break; case section_name:if(t!=section_name)goto done; else{ /*78:*/ #line 1268 "./cwebdir/ctangle.w" { char*try_loc= loc; while(*try_loc==' '&&try_loc<limit)try_loc++; if(*try_loc=='+'&&try_loc<limit)try_loc++; while(*try_loc==' '&&try_loc<limit)try_loc++; if(*try_loc=='=')err_print("! Missing `@ ' before a named section"); } /*:78*/ #line 1241 "./cwebdir/ctangle.w" ; a= cur_section_name-name_dir; app_repl((a/0400)+0250); app_repl(a%0400); /*76:*/ #line 1225 "./cwebdir/ctangle.w" store_two_bytes(0150000); if(changing)id_first= change_file_name; else id_first= cur_file_name; id_loc= id_first+strlen(id_first); if(changing)store_two_bytes((sixteen_bits)change_line); else store_two_bytes((sixteen_bits)cur_line); {int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200); app_repl(a%0400);} /*:76*/ #line 1245 "./cwebdir/ctangle.w" ;break; } case output_defs_code:if(t!=section_name)err_print("! Misplaced @h"); else{ output_defs_seen= 1; a= output_defs_flag; app_repl((a/0400)+0200); app_repl(a%0400); /*76:*/ #line 1225 "./cwebdir/ctangle.w" store_two_bytes(0150000); if(changing)id_first= change_file_name; else id_first= cur_file_name; id_loc= id_first+strlen(id_first); if(changing)store_two_bytes((sixteen_bits)change_line); else store_two_bytes((sixteen_bits)cur_line); {int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200); app_repl(a%0400);} /*:76*/ #line 1254 "./cwebdir/ctangle.w" ; } break; case constant:case string: /*79:*/ #line 1279 "./cwebdir/ctangle.w" app_repl(a); while(id_first<id_loc){ if(*id_first=='@'){ if(*(id_first+1)=='@')id_first++; else err_print("! Double @ should be used in string"); } app_repl(*id_first++); } app_repl(a);break; /*:79*/ #line 1258 "./cwebdir/ctangle.w" ; case ord: /*80:*/ #line 1295 "./cwebdir/ctangle.w" { int c= (eight_bits)*id_first; if(c=='\\'){ c= *++id_first; if(c>='0'&&c<='7'){ c-= '0'; if(*(id_first+1)>='0'&&*(id_first+1)<='7'){ c= 8*c+*(++id_first)-'0'; if(*(id_first+1)>='0'&&*(id_first+1)<='7'&&c<32) c= 8*c+*(++id_first)-'0'; } } else switch(c){ case't':c= '\t';break; case'n':c= '\n';break; case'b':c= '\b';break; case'f':c= '\f';break; case'v':c= '\v';break; case'r':c= '\r';break; case'a':c= '\7';break; case'?':c= '?';break; case'x': if(xisdigit(*(id_first+1)))c= *(++id_first)-'0'; else if(xisxdigit(*(id_first+1))){ ++id_first; c= toupper(*id_first)-'A'+10; } if(xisdigit(*(id_first+1)))c= 16*c+*(++id_first)-'0'; else if(xisxdigit(*(id_first+1))){ ++id_first; c= 16*c+toupper(*id_first)-'A'+10; } break; case'\\':c= '\\';break; case'\'':c= '\'';break; case'\"':c= '\"';break; default:err_print("! Unrecognized escape sequence"); } } app_repl(constant); if(c>=100)app_repl('0'+c/100); if(c>=10)app_repl('0'+(c/10)%10); app_repl('0'+c%10); app_repl(constant); } break; /*:80*/ #line 1260 "./cwebdir/ctangle.w" ; case definition:case format_code:case begin_C:if(t!=section_name)goto done; else{ err_print("! @d, @f and @c are ignored in C text");continue; } case new_section:goto done; /*:77*/ #line 1210 "./cwebdir/ctangle.w" case')':app_repl(a); if(t==macro)app_repl(' '); break; default:app_repl(a); } done:next_control= (eight_bits)a; if(text_ptr> text_info_end)overflow("text"); cur_text= text_ptr;(++text_ptr)->tok_start= tok_ptr; }
int main(int argc, char **argv) { char *arg; char *value; char *type; int rc = 1, opt; int timeout = 600; key_serial_t key; char *progname, *keystr = NULL; int clearing = 0, keymask = 0, display = 0, list = 0; /* Set the basename */ if ((progname = strrchr(argv[0], '/')) != NULL) progname++; else progname = argv[0]; xlog_open(progname); while ((opt = getopt(argc, argv, "du:g:r:ct:vl")) != -1) { switch (opt) { case 'd': display++; break; case 'l': list++; break; case 'u': keymask = UIDKEYS; keystr = strdup(optarg); break; case 'g': keymask = GIDKEYS; keystr = strdup(optarg); break; case 'r': keymask = GIDKEYS|UIDKEYS; keystr = strdup(optarg); break; case 'c': clearing++; break; case 'v': verbose++; break; case 't': timeout = atoi(optarg); break; default: xlog_warn(usage, progname); break; } } if ((rc = nfs4_init_name_mapping(PATH_IDMAPDCONF))) { xlog_errno(rc, "Unable to create name to user id mappings."); return EXIT_FAILURE; } if (!verbose) verbose = conf_get_num("General", "Verbosity", 0); if (display) return display_default_domain(); if (list) return list_keyring(DEFAULT_KEYRING); if (keystr) { return key_invalidate(keystr, keymask); } if (clearing) { xlog_syslog(0); return keyring_clear(DEFAULT_KEYRING); } xlog_stderr(0); if ((argc - optind) != 2) { xlog_err("Bad arg count. Check /etc/request-key.conf"); xlog_warn(usage, progname); return EXIT_FAILURE; } if (verbose) nfs4_set_debug(verbose, NULL); key = strtol(argv[optind++], NULL, 10); arg = strdup(argv[optind]); if (arg == NULL) { xlog_err("strdup failed: %m"); return EXIT_FAILURE; } type = strtok(arg, ":"); value = strtok(NULL, ":"); if (value == NULL) { free(arg); xlog_err("Error: Null uid/gid value."); return EXIT_FAILURE; } if (verbose) { xlog_warn("key: 0x%lx type: %s value: %s timeout %ld", key, type, value, timeout); } /* Become a possesor of the to-be-instantiated key to set the key's timeout */ request_key("keyring", DEFAULT_KEYRING, NULL, KEY_SPEC_THREAD_KEYRING); if (strcmp(type, "uid") == 0) rc = id_lookup(value, key, USER); else if (strcmp(type, "gid") == 0) rc = id_lookup(value, key, GROUP); else if (strcmp(type, "user") == 0) rc = name_lookup(value, key, USER); else if (strcmp(type, "group") == 0) rc = name_lookup(value, key, GROUP); /* Set timeout to 10 (600 seconds) minutes */ if (rc == EXIT_SUCCESS) keyctl_set_timeout(key, timeout); free(arg); return rc; }