import cinit from unix.schottelius.org

Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
This commit is contained in:
Nico Schottelius 2009-09-16 12:53:45 +02:00
commit 423ba10303
13396 changed files with 269468 additions and 0 deletions

View file

@ -0,0 +1,4 @@
-- OBSOLETED --
-> This code is not in use in cinit-0.3 anymore!
util/
External programs, which work with cinit

View file

@ -0,0 +1,94 @@
/*
* (c) 2005 Nico Schottelius (nico-linux at schottelius.org)
* ccontrol: control cinit
* part of cLinux/cinit
*/
/* *stat() */
#include <sys/stat.h>
#include <unistd.h>
/* open */
#include <fcntl.h>
/* signal */
#include <signal.h>
/* PATH_MAX */
#include <limits.h>
/* str* */
#include <string.h>
/* sockets */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include "cinit.h"
/* global variable */
struct listitem *list;
int sock;
pid_t cpid;
/***********************************************************************
* cservice - control cinit
*/
#define USAGE_TEXT "ccontrol - control cinit\n\n" \
"Usage:\n\nccontrol -[phurs]\n" \
"\t-p\t- (power off) Power off the system\n" \
"\t-h\t- (halt) Halt the system \n" \
"\t-u\t- (update) Reboot (warm) and update cinit\n" \
"\t-r\t- (reboot) Reboot the system\n" \
"\t-s\t- (single user/rescue) Rescue mode\n\n" \
#define C_USAGE(error) usage(USAGE_TEXT,error)
/***********************************************************************
* ccontrol: control cinit
*/
int main(int argc, char **argv)
{
/* argv */
if(argc != 2) C_USAGE(MSG_ERR_LESS_ARGS);
if(argv[1][0] != '-') C_USAGE(MSG_ERR_BAD_ARGS);
switch(argv[1][1]) {
case 'p': /* power off */
LOG(MSG_POWER_OFF);
msg_reboot(CMD_POWEROFF);
break;
case 'h': /* halt */
LOG(MSG_HALT);
msg_reboot(CMD_HALT);
break;
case 'r': /* reboot */
LOG(MSG_REBOOT);
msg_reboot(CMD_REBOOT);
break;
case 's': /* rescue */
LOG(MSG_RESCUE);
msg_reboot(CMD_RESCUE);
break;
case 'u': /* update */
LOG(MSG_UPDATE);
msg_reboot(CMD_UPDATE);
break;
default:
C_USAGE(MSG_ERR_BAD_ARGS);
break;
}
return 0;
}
/* cinit-0.2 return codes implemented - nothing changed*/

View file

@ -0,0 +1,164 @@
/*
* (c) 2005 Nico Schottelius (nico-linux-cinit at schottelius.org)
* cservice: control cinit services
* part of cLinux/cinit
*/
/* *stat() */
#include <sys/stat.h>
#include <unistd.h>
/* open */
#include <fcntl.h>
/* signal */
#include <signal.h>
/* PATH_MAX */
#include <limits.h>
/* str* */
#include <string.h>
/* sockets */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include "cinit.h"
/* global variable */
struct listitem *list;
int sock;
pid_t cpid;
/***********************************************************************
* cservice - control cinit services
*/
#define USAGE_TEXT "cservice - start and stop cinit services\n\n" \
"cservice -[ear] <service>\n" \
"\t-e\t- (ein,on ) start a service (respawn if respawning is set)\n" \
"\t-a\t- (aus,off) stop a respawing service\n" \
"\t-r\t- (restart) stop and start a service\n"
/***********************************************************************
* fuzzy_path: allow other kinds of path specification ..
*/
char *fuzzy_path(char *rpath)
{
char pathtmp[PATH_MAX];
char *re = NULL;
/* change to rpath */
if(chdir(rpath) == -1) {
perror(rpath);
return NULL;
}
/* get absolute name of rpath */
if(! (int) getcwd(pathtmp,PATH_MAX)) {
perror(rpath);
return NULL;
}
re = malloc( strlen(pathtmp) + 1);
if(re != NULL) {
strcpy(re,pathtmp);
}
return re;
}
#define C_USAGE(error) usage(USAGE_TEXT,error)
/***********************************************************************
* cservice: the main part for controlling cinit from outside
*/
int main(int argc, char **argv)
{
char *real_name = NULL;
/* argv */
if(argc != 3) C_USAGE(MSG_ERR_LESS_ARGS);
if(argv[1][0] != '-') C_USAGE(MSG_ERR_BAD_ARGS);
if(strlen(argv[1]) != 2) C_USAGE(MSG_ERR_ARGS_LEN);
real_name = fuzzy_path(argv[2]);
/* fuzzy path failed, exit! */
if(real_name == NULL) {
return 1;
}
switch(argv[1][1]) {
case 'a': /* aus */
case 'r': /* restart */
switch( msg_svc_on_off(real_name,CMD_STOP_SVC) ) {
case ST_FAIL:
SERVICE_LOG(real_name,LOG_SVC_FAIL);
break;
case ST_OFF:
SERVICE_LOG(real_name,LOG_SVC_STOPED);
break;
case RT_ERR_COMM:
SERVICE_LOG(real_name,MSG_ERR_COMM);
break;
/* FIX THIS AFTER cinit-0.2 */
case RT_TMPNOW:
case RT_ERR:
case RT_SVC_FAILED:
case RT_UNSPEC:
case RT_SUCCESS:
case ST_NEED_FAIL:
case ST_TMP:
case ST_ONCE:
case RT_NOTEXIST:
case ST_RESPAWN:
// SERVICE_LOG(real_name,"Ein bekanntest ding");
break;
/* default:
SERVICE_LOG(real_name,MSG_SHOULD_NOT_HAPPEN);
break; */
}
if( argv[1][1] == 'a') break; /* only continue if restarting */
case 'e': /* ein */
switch (run_svc(real_name)) { /* run_svc fuzzys itself */
case RT_NOTEXIST:
SERVICE_LOG(real_name,LOG_SVC_NOTEXIST);
break;
case RT_SVC_FAILED:
SERVICE_LOG(real_name,LOG_SVC_FAILED);
break;
case ST_FAIL:
SERVICE_LOG(real_name,LOG_SVC_FAIL);
break;
case ST_ONCE:
SERVICE_LOG(real_name,LOG_SVC_ONCE);
break;
case RT_ERR_COMM:
SERVICE_LOG(real_name,MSG_ERR_COMM);
break;
case ST_RESPAWN:
SERVICE_LOG(real_name,LOG_SVC_RESPAWN);
break;
case ST_NEED_FAIL:
SERVICE_LOG(real_name,LOG_NEED_FAIL);
break;
default:
SERVICE_LOG(real_name,MSG_SHOULD_NOT_HAPPEN);
break;
}
break;
default:
C_USAGE(MSG_ERR_BAD_ARGS);
break;
}
return 0;
}
/* uses cinit-0.2 return code style */

View file

@ -0,0 +1,21 @@
/*
* (c) 2005 Nico Schottelius (nico-linux at schottelius.org)
* reboot/halt/poweroff/rescue
* part of cinit
*/
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include "cinit.h"
/* we trust the caller */
int msg_reboot(char cmd)
{
if(!begin_msg(cmd)) return 0;
close(sock);
return 1;
}
/* clean for cinit-0.2 */