int main(int argc, char* argv[]) { char group; int pid = atoi(argv[1]); if (argc != 3) { printf("> Usage: %s <app_pid> <new_group:A/B/C>\n", argv[0]); return 0; } group = getgroup(pid); printf("> Process pid=%d is of group '%c'\n", pid, group); group = argv[2][0]; if (group <'A' || group > 'C') { printf("> Invalid group code. Only A,B or C is allowed\n"); return 0; } printf("> Changing group to '%c'...\n", group); setgroup(pid, group); group = getgroup(pid); printf("> Process pid=%d is now of group '%c'\n", pid, group); return 0; }
/* * Setup standard FHS 2.3 structure in /var, and * write runlevel to UTMP, needed by, e.g., printerdrake. */ static void setup(void *UNUSED(arg)) { #ifdef RUNLEVEL struct utmp entry; #endif _d("Setting up FHS structure in /var ..."); makedir("/var/cache", 0755); makedir("/var/games", 0755); makedir("/var/lib", 0755); makedir("/var/lib/misc", 0755); makedir("/var/lib/alarm", 0755); makedir("/var/lock", 0755); makedir("/var/log", 0755); makedir("/var/mail", 0755); makedir("/var/opt", 0755); makedir("/var/run", 0755); makedir("/var/spool", 0755); makedir("/var/spool/cron", 0755); makedir("/var/tmp", 0755); makedir("/var/empty", 0755); _d("Setting up necessary UTMP files ..."); touch("/var/run/utmp"); chown("/var/run/utmp", 0, getgroup("utmp")); #ifdef RUNLEVEL memset(&entry, 0, sizeof(struct utmp)); entry.ut_type = RUN_LVL; entry.ut_pid = '0' + RUNLEVEL; setutent(); pututline(&entry); endutent(); #endif #ifdef TOUCH_ETC_NETWORK_RUN_IFSTATE touch("/etc/network/run/ifstate"); #else erase("/etc/network/run/ifstate"); #endif _d("Setting up misc files ..."); makedir("/var/run/lldpd", 0755); /* Needed by lldpd */ makedir("/var/run/pluto", 0755); /* Needed by Openswan */ makedir("/var/run/quagga", 0755); /* Needed by Quagga */ makedir("/var/log/quagga", 0755); /* Needed by Quagga */ makedir("/var/run/sshd", 01755); /* OpenSSH */ makefifo("/dev/xconsole", 0640); /* sysklogd */ chown("/dev/xconsole", 0, getgroup("tty")); }
void setgroup(const char *group) { gid_t gid; if (!strlen(group)) { return; } if (getuid() != 0 && geteuid() != 0) { printf("Error: Group can only be set as root.\n"); exit(EXIT_FAILURE); } if (isnumeric(group) && atoi(group) == 0) { return; } gid = getgroup(group); if (debug) printf("switching to group id %d.\n", gid); if (setgid(gid) != 0) { perror("Error: setgid"); exit(EXIT_FAILURE); } }
void updatedirowner(const char *dir, const char *user, const char *group) { DIR *d; struct dirent *di; struct stat statbuf; char entryname[512]; uid_t uid; gid_t gid; if (!cfg.updatefileowner) { return; } if (getuid() != 0 && geteuid() != 0) { if (debug) printf("user not root, skipping chmod\n"); return; } uid = getuser(user); gid = getgroup(group); if (stat(dir, &statbuf)!=0) { return; } if (statbuf.st_uid != uid || statbuf.st_gid != gid) { if (chown(dir, uid, gid) != 0) { if (debug) printf("Error: updatedirowner() chown() \"%s\": %s\n", dir, strerror(errno)); return; } else { if (debug) printf("\"%s\" chown completed\n", dir); } } if ((d=opendir(dir))==NULL) { if (debug) printf("Error: updatedirowner() diropen() \"%s\": %s\n", dir, strerror(errno)); return; } while ((di=readdir(d))) { if (di->d_type != DT_REG) { continue; } snprintf(entryname, 512, "%s/%s", dir, di->d_name); if (stat(entryname, &statbuf)!=0) { continue; } if (statbuf.st_uid != uid || statbuf.st_gid != gid) { if (chown(entryname, uid, gid) != 0) { if (debug) printf("Error: chown() \"%s\": %s\n", entryname, strerror(errno)); } else { if (debug) printf("\"%s\" chown completed\n", entryname); } } } closedir(d); }
static int get_ics_info(faacDecHandle hDecoder, byte *win, byte *wshape, byte *group, byte *max_sfb, int *lpflag, int *prstflag, NOK_LT_PRED_STATUS *nok_ltp_status, NOK_LT_PRED_STATUS *nok_ltp_status_right, int stereo_flag) { Info *info; int i, j; int max_pred_sfb = pred_max_bands(hDecoder); faad_get1bit(&hDecoder->ld); /* reserved bit */ *win = (unsigned char)faad_getbits(&hDecoder->ld, LEN_WIN_SEQ); *wshape = (unsigned char)faad_get1bit(&hDecoder->ld); /* window shape */ if ((info = hDecoder->winmap[*win]) == NULL) /* CommonExit(1, "bad window code"); */ return 0; /* * max scale factor, scale factor grouping and prediction flags */ prstflag[0] = 0; if (info->islong) { *max_sfb = (unsigned char)faad_getbits(&hDecoder->ld, LEN_MAX_SFBL); group[0] = 1; if (hDecoder->mc_info.object_type != AACLTP) { if ((lpflag[0] = faad_getbits(&hDecoder->ld, LEN_PRED_PRES))) { if ((prstflag[0] = faad_getbits(&hDecoder->ld, LEN_PRED_RST))) { for(i=1; i<LEN_PRED_RSTGRP+1; i++) prstflag[i] = faad_getbits(&hDecoder->ld, LEN_PRED_RST); } j = ( (*max_sfb < max_pred_sfb) ? *max_sfb : max_pred_sfb ) + 1; for (i = 1; i < j; i++) lpflag[i] = faad_getbits(&hDecoder->ld, LEN_PRED_ENAB); for ( ; i < max_pred_sfb+1; i++) lpflag[i] = 0; } } else { /* AAC LTP */ if(faad_get1bit(&hDecoder->ld)) { nok_lt_decode(hDecoder, *max_sfb, nok_ltp_status->sbk_prediction_used, nok_ltp_status->sfb_prediction_used, &nok_ltp_status->weight, nok_ltp_status->delay); if(stereo_flag) nok_lt_decode(hDecoder, *max_sfb, nok_ltp_status_right->sbk_prediction_used, nok_ltp_status_right->sfb_prediction_used, &nok_ltp_status_right->weight, nok_ltp_status_right->delay); } else { nok_ltp_status->sbk_prediction_used[0] = 0; if(stereo_flag) nok_ltp_status_right->sbk_prediction_used[0] = 0; } } } else { *max_sfb = (unsigned char)faad_getbits(&hDecoder->ld, LEN_MAX_SFBS); getgroup(hDecoder, info, group); lpflag[0] = 0; nok_ltp_status->sbk_prediction_used[0] = 0; if(stereo_flag) nok_ltp_status_right->sbk_prediction_used[0] = 0; } return 1; }
PROTO int group(const char *group, char nogroupecho) { char b[MAX_SERVERRSP]; ACTIVE *newgroup; SERVER *svr; CLEARBUF if ( nullstr(group) ) { swriteclient(client,"500 You must select a group\r\n"); return 1; } /* only change group if it has changed */ if ( client->group == NULL || strcmp(client->group->newsgroup, group) != 0 ) { /* check for read permission */ if ( ! match_expression((unsigned char *)group , (unsigned char *)getwildmat(client->user->readpat) , 0) ) { if ( ! nogroupecho ) swriteclient(client, MSG_NOSUCHGROUP); return 1; } /* find and load our new group */ if ( (newgroup = getgroup(group)) == NULL ) { if ( ! nogroupecho ) swriteclient(client, MSG_NOSUCHGROUP); return 1; } if ( (svr=getserver(newgroup->server)) == NULL ) return swriteclient(client, "500 Cant find server for group\r\n"); /* disconnect first if we have to change server */ if ( client->groupserver != NULL && client->connected == 1 && strcmp(svr->Groups, client->groupserver->Groups) != 0 ) { disconnect_server(client); } /* close group and reconnect */ closegroup(); client->group = newgroup; switch ( connect_groupserver(client, svr->Name) ) { case CONNECT_ERR: return swriteclient(client, "500 Error selecting server\r\n"); case CONNECT_DOWN: sleep(cfg.DownDelay); return writeclient(client, MSG_SERVER_DOWN); default: break; } /* reset by connect_groupserver (via disconnect_server FIXME) */ client->group = newgroup; client->groups++; } if ( ! writeserver(client, "GROUP %s\r\n", group) ) return -1; if ( ! readserver(client, b, MAX_SERVERRSP-1) ) return -1; syslog(LOG_NOTICE, "%s: group %s", client->hostname, group); if ( ! nogroupecho ) return swriteclient(client,b); return 0; }
Int get_ics_info( const tMP4AudioObjectType audioObjectType, BITS *pInputStream, const Bool common_window, WINDOW_SEQUENCE *pWindowSequence, WINDOW_SHAPE *pWindowShape, Int group[], Int *p_max_sfb, FrameInfo *p_winmap[], LT_PRED_STATUS *pFirstLTPStatus, LT_PRED_STATUS *pSecondLTPStatus) { WINDOW_SEQUENCE windowSequence; UInt temp; Bool predictor_data_present; UInt local_max_sfb; UInt allowed_max_sfb; Int status = SUCCESS; Bool first_ltp_data_present = FALSE; Bool second_ltp_data_present = FALSE; /* * The following three calls to getbits have been replaced with one * call for speed: * * getbits(LEN_ICS_RESERV, pInputStream); * windowSequence = getbits(LEN_WIN_SEQ, pInputStream); * *pWindowShape = getbits(LEN_WIN_SH, pInputStream); * */ temp = get9_n_lessbits( LEN_ICS_RESERV + LEN_WIN_SEQ + LEN_WIN_SH, pInputStream); windowSequence = (WINDOW_SEQUENCE)((temp >> LEN_WIN_SH) & ((0x1 << LEN_WIN_SEQ) - 1)); *pWindowShape = (WINDOW_SHAPE)((temp) & ((0x1 << LEN_WIN_SH) - 1)); /* * This pointer should not be NULL as long as the initialization code * has been run, so the test for NULL has been removed. */ allowed_max_sfb = p_winmap[windowSequence]->sfb_per_win[0]; if (windowSequence == EIGHT_SHORT_SEQUENCE) { local_max_sfb = get9_n_lessbits(LEN_MAX_SFBS, pInputStream); getgroup( group, pInputStream); if (local_max_sfb > allowed_max_sfb) { status = 1; /* ERROR CODE - needs to be updated */ } } /* end of TRUE of if (windowSequence == EIGHT_SHORT_SEQUENCE) */ else { /* There is only one group for long windows. */ group[0] = 1; /* * The window is long, get the maximum scale factor bands, * and get long term prediction info. * * Reference [1] states that the audioObjectType is first tested, * then the predictor_data_present is read on either branch of the * if (audioObjectType == MP4AUDIO_LTP). Instead, this code combines * the two calls on both branches into one before the * if, and then in turn combines with another call to getbits, all * in the name of speed. * * This would be the individual calls, without checking the number * of scale factor bands: * * local_max_sfb = * (Int) getbits( * LEN_MAX_SFBL, * pInputStream); * * if (audioObjectType == MP4AUDIO_LTP) * { * predictor_data_present = * (Bool) getbits( * LEN_PREDICTOR_DATA_PRESENT, * pInputStream); * * ..... (read LTP data) * * } * else * { * * predictor_data_present = * (Bool) getbits( * LEN_PREDICTOR_DATA_PRESENT, * pInputStream); * * ..... (its an error for this library) * } */ temp = get9_n_lessbits( LEN_MAX_SFBL + LEN_PREDICTOR_DATA_PRESENT, pInputStream); local_max_sfb = (Int)(temp >> LEN_PREDICTOR_DATA_PRESENT); predictor_data_present = (Bool)(temp & ((0x1 << LEN_PREDICTOR_DATA_PRESENT) - 1)); if (local_max_sfb > allowed_max_sfb) { status = 1; /* ERROR CODE - needs to be updated */ } else if (audioObjectType == MP4AUDIO_LTP) { /* * Note that the predictor data bit has already been * read. */ /* * If the object type is LTP, the predictor data is * LTP. If the object type is not LTP, the predictor data * is so called "frequency predictor data", which is not * supported by this implementation. Refer to (1) */ if (predictor_data_present != FALSE) { first_ltp_data_present = (Bool) get1bits(/* LEN_LTP_DATA_PRESENT,*/ pInputStream); if (first_ltp_data_present != FALSE) { lt_decode( windowSequence, pInputStream, local_max_sfb, pFirstLTPStatus); } if (common_window != FALSE) { second_ltp_data_present = (Bool) get1bits(/* LEN_LTP_DATA_PRESENT,*/ pInputStream); if (second_ltp_data_present != FALSE) { lt_decode( windowSequence, pInputStream, local_max_sfb, pSecondLTPStatus); } } /* if (common_window != FALSE) */ } /* if (predictor_data_present != FALSE) */ } /* else if (audioObjectType == MP4AUDIO_LTP) */ else { /* * Note that the predictor data bit has already been * read. */ /* * The object type is not LTP. If there is data, its * frequency predictor data, not supported by this * implementation. */ if (predictor_data_present != FALSE) { status = 1; /* ERROR CODE UPDATE LATER */ } /* if (predictor_data_present != FALSE) */ } /* end of "else" clause of if (audioObjectType == MP4AUDIO_LTP) */ } /* if (windowSequence == EIGHT_SHORT_SEQUENCE) [FALSE branch] */ /* * Save all local copies. */ pFirstLTPStatus->ltp_data_present = first_ltp_data_present; if (common_window != FALSE) { pSecondLTPStatus->ltp_data_present = second_ltp_data_present; } *p_max_sfb = local_max_sfb; *pWindowSequence = windowSequence; return (status); } /* get_ics_info */
void write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des) { int name_len; union tar_record tar_rec; struct tar_header *tar_hdr = (struct tar_header *) &tar_rec; memset (&tar_rec, 0, sizeof tar_rec); /* process_copy_out must ensure that file_hdr->c_name is short enough, or we will lose here. */ name_len = strlen (file_hdr->c_name); if (name_len <= TARNAMESIZE) { strncpy (tar_hdr->name, file_hdr->c_name, name_len); } else { /* Fit as much as we can into `name', the rest into `prefix'. */ int prefix_len = split_long_name (file_hdr->c_name, name_len); strncpy (tar_hdr->prefix, file_hdr->c_name, prefix_len); strncpy (tar_hdr->name, file_hdr->c_name + prefix_len + 1, name_len - prefix_len - 1); } /* Ustar standard (POSIX.1-1988) requires the mode to contain only 3 octal digits */ to_oct (file_hdr->c_mode & MODE_ALL, 8, tar_hdr->mode); to_oct (file_hdr->c_uid, 8, tar_hdr->uid); to_oct (file_hdr->c_gid, 8, tar_hdr->gid); to_oct (file_hdr->c_filesize, 12, tar_hdr->size); to_oct (file_hdr->c_mtime, 12, tar_hdr->mtime); switch (file_hdr->c_mode & CP_IFMT) { case CP_IFREG: if (file_hdr->c_tar_linkname) { /* process_copy_out makes sure that c_tar_linkname is shorter than TARLINKNAMESIZE. */ strncpy (tar_hdr->linkname, file_hdr->c_tar_linkname, TARLINKNAMESIZE); tar_hdr->typeflag = LNKTYPE; to_oct (0, 12, tar_hdr->size); } else tar_hdr->typeflag = REGTYPE; break; case CP_IFDIR: tar_hdr->typeflag = DIRTYPE; break; case CP_IFCHR: tar_hdr->typeflag = CHRTYPE; break; case CP_IFBLK: tar_hdr->typeflag = BLKTYPE; break; #ifdef CP_IFIFO case CP_IFIFO: tar_hdr->typeflag = FIFOTYPE; break; #endif /* CP_IFIFO */ #ifdef CP_IFLNK case CP_IFLNK: tar_hdr->typeflag = SYMTYPE; /* process_copy_out makes sure that c_tar_linkname is shorter than TARLINKNAMESIZE. */ strncpy (tar_hdr->linkname, file_hdr->c_tar_linkname, TARLINKNAMESIZE); to_oct (0, 12, tar_hdr->size); break; #endif /* CP_IFLNK */ } if (archive_format == arf_ustar) { char *name; strncpy (tar_hdr->magic, TMAGIC, TMAGLEN); strncpy (tar_hdr->version, TVERSION, TVERSLEN); name = getuser (file_hdr->c_uid); if (name) strcpy (tar_hdr->uname, name); name = getgroup (file_hdr->c_gid); if (name) strcpy (tar_hdr->gname, name); to_oct (file_hdr->c_rdev_maj, 8, tar_hdr->devmajor); to_oct (file_hdr->c_rdev_min, 8, tar_hdr->devminor); } to_oct (tar_checksum (tar_hdr), 8, tar_hdr->chksum); tape_buffered_write ((char *) &tar_rec, out_des, TARRECORDSIZE); }
/* -------------------------------------------------------------------- */ void Readlog(BOOL revOrder) { int i, grpslot; char dtstr[80]; char flags[11]; char wild=FALSE; char buser=FALSE; char step; grpslot = ERROR; if (mf.mfUser[0]) { getNormStr("user", mf.mfUser, NAMESIZE, ECHO); stripansi(mf.mfUser); if (personexists(mf.mfUser) == ERROR) { if( strpos('?',mf.mfUser) || strpos('*',mf.mfUser) || strpos('[',mf.mfUser)) { wild = TRUE; } else { mPrintf(" \nNo such user!\n "); return; } } else { buser = TRUE; } } outFlag = OUTOK; setio(whichIO, echo, outFlag); if (mf.mfLim && (cfg.readluser || sysop || aide)) { doCR(); getgroup(); if (!mf.mfLim) return; grpslot = groupexists(mf.mfGroup); } else { mf.mfLim = FALSE; } outFlag = OUTOK; setio(whichIO, echo, outFlag); if (!expert) mPrintf(" \n \n <3J0>ump <3N0>ext <3P0>ause <3S0>top"); if (!revOrder) { step = 1; i = 0; } else { step = -1; i = cfg.MAXLOGTAB - 1; } for ( ; ( (i < cfg.MAXLOGTAB) && (outFlag != OUTSKIP) && (i >= 0) ); i += step) { if(mAbort(FALSE)) return; if (logTab[i].ltpwhash != 0 && logTab[i].ltnmhash != 0) { if (buser && (int)hash(mf.mfUser) != logTab[i].ltnmhash) continue; getLog(&lBuf,logTab[i].ltlogSlot); if (buser && strcmpi(mf.mfUser, lBuf.lbname) != SAMESTRING) continue; if(wild && !u_match(deansi(lBuf.lbname), mf.mfUser)) continue; if (mf.mfLim && (lBuf.groups[grpslot] != grpBuf.group[grpslot].groupgen) && (strcmpi(lBuf.lbname, cfg.sysop) != SAMESTRING ) ) continue; /* Show yourself even if unlisted */ if ( (!i && loggedIn) || (lBuf.lbflags.L_INUSE && (aide || !lBuf.lbflags.UNLISTED) ) ) { if (verbose) { strftime(dtstr, 79, (loggedIn) ? logBuf.vdstamp : cfg.vdatestamp, lBuf.calltime); if ((cfg.surnames || cfg.titles) && /* verbose >= 2 */ logBuf.DISPLAYTS) { doCR(); doCR(); if (*lBuf.title) mPrintf(" [%s]", lBuf.title); mPrintf(" 3%s0", lBuf.lbname); if (*lBuf.surname) mPrintf(" [%s]", lBuf.surname); doCR(); mPrintf(" #%lu %s", lBuf.callno, dtstr); } else { doCR(); mPrintf(" 3%-20s0 #%lu %s", lBuf.lbname, lBuf.callno, dtstr); } } else { doCR(); #if 1 if (aide || lBuf.lbflags.NODE) #endif mPrintf(" %-20s",lBuf.lbname); #if 1 else mPrintf(" %s", lBuf.lbname); #endif } if (aide ) /* A>ide T>wit P>erm U>nlist N>etuser S>ysop */ { if (cfg.accounting && verbose) { if (lBuf.lbflags.NOACCOUNT) mPrintf( " %10s", "N/A"); else mPrintf( " %10.2f", lBuf.credits); } strcpy(flags, " "); if ( lBuf.lbflags.AIDE) flags[0] = 'A'; if ( lBuf.lbflags.PROBLEM) flags[1] = 'T'; if ( lBuf.lbflags.PERMANENT) flags[2] = 'P'; if ( lBuf.lbflags.NETUSER) flags[3] = 'N'; if ( lBuf.lbflags.UNLISTED) flags[4] = 'U'; if ( lBuf.lbflags.SYSOP) flags[5] = 'S'; if ( lBuf.lbflags.NOMAIL) flags[6] = 'M'; if ( lBuf.VERIFIED) flags[7] = 'V'; if ( lBuf.DUNGEONED) flags[8] = 'D'; if ( lBuf.MSGAIDE) flags[9] = 'm'; mPrintf(" %s",flags); } if (lBuf.lbflags.NODE) { mPrintf(" (Node) "); } } #ifdef GOODBYE if (verbose) { strftime(dtstr, 79, (loggedIn) ? logBuf.dstamp : cfg.datestamp, lBuf.calltime); if ((cfg.surnames || cfg.titles) && logBuf.DISPLAYTS) { doCR(); mPrintf(" [%s] 3%s0 [%s]", lBuf.title, lBuf.lbname, lBuf.surname); doCR(); mPrintf(" #%lu %s", lBuf.callno, dtstr); } else { doCR(); mPrintf(" 3%-20s0 #%lu %s", lBuf.lbname, lBuf.callno, dtstr); } } else { doCR(); mPrintf(" %-20s",lBuf.lbname); } if (aide ) /* A>ide T>wit P>erm U>nlist N>etuser S>ysop */ { if (cfg.accounting && verbose) { if (lBuf.lbflags.NOACCOUNT) mPrintf( " %10s", "N/A"); else mPrintf( " %10.2f", lBuf.credits); } strcpy(flags, " "); if ( lBuf.lbflags.AIDE) flags[0] = 'A'; if ( lBuf.lbflags.PROBLEM) flags[1] = 'T'; if ( lBuf.lbflags.PERMANENT) flags[2] = 'P'; if ( lBuf.lbflags.NETUSER) flags[3] = 'N'; if ( lBuf.lbflags.UNLISTED) flags[4] = 'U'; if ( lBuf.lbflags.SYSOP) flags[5] = 'S'; if ( lBuf.lbflags.NOMAIL) flags[6] = 'M'; if ( lBuf.VERIFIED) flags[7] = 'V'; if ( lBuf.DUNGEONED) flags[8] = 'D'; if ( lBuf.MSGAIDE) flags[9] = 'm'; mPrintf(" %s",flags); } if (lBuf.lbflags.NODE) { mPrintf(" (Node) "); } if (verbose) doCR(); } #endif } }