Ejemplo n.º 1
0
/** 
 * Check if a syscall gets logged properly when it's been already intercepted
 */
int do_monitor(int sysno) {
	int sno, ret, i;
	long args[6];
	
	sno = sysno;
	for(i = 0; i < 6; i++) {
		args[i] = rand();
	}

	ret = syscall(sno, args[0], args[1], args[2], args[3], args[4], args[5]);
	if(ret) ret = -errno;

	//printf("[%x]%lx(%lx,%lx,%lx,%lx,%lx,%lx)\n", getpid(), (long)sysno, 
	//	args[0], args[1], args[2], args[3], args[4], args[5]);

	test("%d nonroot monitor", sysno, find_log(getpid(), (long)sno, args, (long)ret) == 0);
	return 0;
}
Ejemplo n.º 2
0
/**
 * Invokes a syscall from current thread.
 */
int do_monitor1(int sysno, int* found_log) {
	int sno, ret, i;
	long args[6];

	sno = sysno;
	for (i = 0; i < 6; i++) {
		args[i] = rand();
	}

	ret = syscall(sno, args[0], args[1], args[2], args[3], args[4], args[5]);
	if (ret) ret = -errno;

	if (found_log)
		*found_log = find_log(getpid(), (long)sno, args) == 0;

	//printf("[%x]%lx(%lx,%lx,%lx,%lx,%lx,%lx)\n", getpid(), (long)sysno,
	//	args[0], args[1], args[2], args[3], args[4], args[5]);

	return ret;
}
Ejemplo n.º 3
0
int
main(
    int		argc,
    char **	argv)
{
    disklist_t diskl;
    int no_keep;			/* files per system to keep */
    char **output_find_log;
    DIR *dir;
    struct dirent *adir;
    char **name;
    int useful;
    char *olddir;
    char *oldfile = NULL, *newfile = NULL;
    time_t today, date_keep;
    char *logname = NULL;
    struct stat stat_log;
    struct stat stat_old;
    char *conf_diskfile;
    char *conf_tapelist;
    char *conf_logdir;
    int dumpcycle;
    config_overwrites_t *cfg_ovr = NULL;

    /*
     * Configure program for internationalization:
     *   1) Only set the message locale for now.
     *   2) Set textdomain for all amanda related programs to "amanda"
     *      We don't want to be forced to support dozens of message catalogs.
     */  
    setlocale(LC_MESSAGES, "C");
    textdomain("amanda"); 

    safe_fd(-1, 0);
    safe_cd();

    set_pname("amtrmlog");

    /* Don't die when child closes pipe */
    signal(SIGPIPE, SIG_IGN);

    cfg_ovr = extract_commandline_config_overwrites(&argc, &argv);

    if (argc > 1 && strcmp(argv[1], "-t") == 0) {
	amtrmidx_debug = 1;
	argc--;
	argv++;
    }

    if (argc < 2) {
	g_fprintf(stderr, _("Usage: %s [-t] <config> [-o configoption]*\n"), argv[0]);
	return 1;
    }

    dbopen(DBG_SUBDIR_SERVER);
    dbprintf(_("%s: version %s\n"), argv[0], version());

    config_init(CONFIG_INIT_EXPLICIT_NAME, argv[1]);
    apply_config_overwrites(cfg_ovr);

    conf_diskfile = config_dir_relative(getconf_str(CNF_DISKFILE));
    read_diskfile(conf_diskfile, &diskl);
    amfree(conf_diskfile);

    if (config_errors(NULL) >= CFGERR_WARNINGS) {
	config_print_errors();
	if (config_errors(NULL) >= CFGERR_ERRORS) {
	    g_critical(_("errors processing config file"));
	}
    }

    check_running_as(RUNNING_AS_DUMPUSER);

    dbrename(get_config_name(), DBG_SUBDIR_SERVER);

    conf_tapelist = config_dir_relative(getconf_str(CNF_TAPELIST));
    if (read_tapelist(conf_tapelist)) {
	error(_("could not load tapelist \"%s\""), conf_tapelist);
	/*NOTREACHED*/
    }
    amfree(conf_tapelist);

    today = time((time_t *)NULL);
    dumpcycle = getconf_int(CNF_DUMPCYCLE);
    if(dumpcycle > 5000)
	dumpcycle = 5000;
    date_keep = today - (dumpcycle * 86400);

    output_find_log = find_log();

    /* determine how many log to keep */
    no_keep = getconf_int(CNF_TAPECYCLE) * 2;
    dbprintf(plural(_("Keeping %d log file\n"),
		    _("Keeping %d log files\n"), no_keep),
	     no_keep);

    conf_logdir = config_dir_relative(getconf_str(CNF_LOGDIR));
    olddir = vstralloc(conf_logdir, "/oldlog", NULL);
    if (mkpdir(olddir, 0700, (uid_t)-1, (gid_t)-1) != 0) {
	error(_("could not create parents of %s: %s"), olddir, strerror(errno));
	/*NOTREACHED*/
    }
    if (mkdir(olddir, 0700) != 0 && errno != EEXIST) {
	error(_("could not create %s: %s"), olddir, strerror(errno));
	/*NOTREACHED*/
    }

    if (stat(olddir,&stat_old) == -1) {
	error(_("can't stat oldlog directory \"%s\": %s"), olddir, strerror(errno));
	/*NOTREACHED*/
    }

    if (!S_ISDIR(stat_old.st_mode)) {
	error(_("Oldlog directory \"%s\" is not a directory"), olddir);
	/*NOTREACHED*/
    }

    if ((dir = opendir(conf_logdir)) == NULL) {
	error(_("could not open log directory \"%s\": %s"), conf_logdir,strerror(errno));
	/*NOTREACHED*/
    }
    while ((adir=readdir(dir)) != NULL) {
	if(strncmp(adir->d_name,"log.",4)==0) {
	    useful=0;
	    for (name=output_find_log;*name !=NULL; name++) {
		if((strlen(adir->d_name) >= 13 &&
		    strlen(*name) >= 13 &&
		    adir->d_name[12] == '.' && (*name)[12] == '.' &&
		    strncmp(adir->d_name,*name,12)==0) ||
		   strncmp(adir->d_name,*name,18)==0) {
		    useful=1;
		    break;
		}
	    }
	    logname=newvstralloc(logname,
				 conf_logdir, "/" ,adir->d_name, NULL);
	    if(stat(logname,&stat_log)==0) {
		if((time_t)stat_log.st_mtime > date_keep) {
		    useful = 1;
		}
	    }
	    if(useful == 0) {
		oldfile = newvstralloc(oldfile,
				       conf_logdir, "/", adir->d_name, NULL);
		newfile = newvstralloc(newfile,
				       olddir, "/", adir->d_name, NULL);
		if (rename(oldfile,newfile) != 0) {
		    error(_("could not rename \"%s\" to \"%s\": %s"),
			  oldfile, newfile, strerror(errno));
		    /*NOTREACHED*/
	    	}
	    }
	}
    }
    closedir(dir);
    for (name = output_find_log; *name != NULL; name++) {
	amfree(*name);
    }
    amfree(output_find_log);
    amfree(logname);
    amfree(oldfile);
    amfree(newfile);
    amfree(olddir);
    amfree(conf_logdir);
    clear_tapelist();
    free_disklist(&diskl);

    dbclose();

    return 0;
}
Ejemplo n.º 4
0
int main(int argc, char* argv[])
{
    int i,nsfd[10];
    int sfd1,ssfd,clilen1,clilen;
    struct hostent *server;
    struct sockaddr_in serv_addr,serv_addr1,cli_addr1,cli_addr;

    int socketfd=socket(AF_INET, SOCK_STREAM, 0);
    perror("socket:\n");

    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    if(atoi(argv[1])==1)  serv_addr.sin_port = htons(1233);
    else if(atoi(argv[1])==2)  serv_addr.sin_port = htons(1234);

    bind(socketfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr));
    perror("bind:\n");

    listen(socketfd,10);



    if(atoi(argv[1]) == 1)
    {


        ssfd=socket(AF_INET, SOCK_STREAM, 0);
        perror("socket:\n");

        serv_addr1.sin_family=AF_INET;
        serv_addr1.sin_addr.s_addr = INADDR_ANY;
        serv_addr1.sin_port = htons(2348);

        bind(ssfd, (struct sockaddr *) &serv_addr1,sizeof(serv_addr1));
        perror("bind:\n");

        listen(ssfd,10);

        sfd1=accept(ssfd, (struct sockaddr *) &cli_addr1, &clilen1);
        perror("accept:\n");

//create socket for tree to tree commuunication in t1


    }

    else if(atoi(argv[1]) ==2)
    {
//socket
        sfd1=socket(AF_INET, SOCK_STREAM, 0);
        perror("socket:\n");
        server = gethostbyname("localhost");
        perror("gethostbyname:\n");

        memset((char *) &serv_addr,0, sizeof(serv_addr));

        serv_addr1.sin_family = AF_INET;
        bcopy((char *)server->h_addr,(char *)&serv_addr1.sin_addr.s_addr,server->h_length);
        serv_addr1.sin_port = htons(2348);

//connect
        connect(sfd1,(struct sockaddr *) &serv_addr1,sizeof(serv_addr1));
        perror("connect:\n");




//create socket for tree to tree communication in t2


    }
    int cnt=0;
    int arr[50];
    fd_set rfds;
    char gno[10],cno[10],buffer[256],tag[256];
    while(1)
    {

        FD_ZERO(&rfds);
        int max=socketfd;
        FD_SET(socketfd,&rfds);
        FD_SET(sfd1,&rfds);
        if(max<sfd1) max=sfd1;

        for(i=0; i<cnt; i++)
        {
            FD_SET(nsfd[i],&rfds);
            if(nsfd[i]>max) max=nsfd[i];
        }

        int n=select(max+1,&rfds,NULL,NULL,NULL);

        if(n>0)
        {
            if(FD_ISSET(socketfd,&rfds))
            {
                nsfd[cnt]=accept(socketfd, (struct sockaddr *) &cli_addr, &clilen);
                perror("accept:\n");
                sleep(3);
                read(nsfd[cnt],buffer,strlen(buffer));
                /* printf("buffer when accepting %s\n",buffer);
                 arr[cnt]=atoi(buffer);
                */
                printf("connection established by client %d to server %d\n",cnt,atoi(argv[1]));

                memset(buffer,'\0',255);
                cnt++;

            }
            else if(FD_ISSET(sfd1,&rfds))
            {
                printf("reading from other server\n");
                sleep(1);
                read(sfd1,cno,strlen(cno));
                sleep(1);
                read(sfd1,gno,strlen(gno));
                sleep(1);
                read(sfd1,buffer,strlen(buffer));
                sleep(1);
                read(sfd1,tag,strlen(tag));

                for(i=0; i<cnt; i++)
                {
                    if(arr[i]==atoi(cno)) break;
                }

                if(strcmp(tag,"encrypted")==0)
                {
                    printf("msg has to b decrypted\n");
                }
                write(nsfd[i],buffer,strlen(buffer));

            }
            else
            {

                for(i=0; i<cnt; i++)
                {
                    if(FD_ISSET(nsfd[i],&rfds))
                    {
                        printf("reading frm client %d\n",i);
                        sleep(1);
                        read(nsfd[i],gno,10);
                        printf("group of sender %s\n",gno);
                        sleep(1);
                        read(nsfd[i],cno,10);
                        printf("cno of sender %s\n",cno);
                        sleep(1);
                        read(nsfd[i],buffer,255);
                        printf("msg %s\n",buffer);
                        //decide and send to head of tree
                        if(atoi(gno)==atoi(argv[1]))
                        {
                            printf("msg to be sent in same group\n");

                            int j;
                            for(j=0; j<cnt; j++)
                            {
                                if(j+1==atoi(cno)) break;
                            }
                            write(nsfd[j],buffer,strlen(buffer));
                        }
                        else
                        {

                            strcpy(tag,"plain");
                            if( find_log(arr[i])!=find_log(atoi(cno)))
                            {
                                //msg has to b sent to the other server after encryption
                                //encrypt buffer
                                strcpy(tag,"encrypted");
                            }
                            write(sfd1,gno,strlen(gno));
                            write(sfd1,cno,strlen(cno));
                            write(sfd1,buffer,strlen(buffer));
                            write(sfd1,tag,strlen(tag));
                        }
                    }
                }
            }
        }
        sleep(5);
    }
    return 0;
}