⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendsize.c

📁 开源备份软件源码 AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that a
💻 C
📖 第 1 页 / 共 4 页
字号:
    else#endif							/* } */#ifdef VXDUMP						/* { */#ifdef DUMP						/* { */    if (strcmp(fstype, "vxfs") == 0)#else							/* } { */    if (1)#endif							/* } */    {#ifdef USE_RUNDUMP	name = stralloc(" (vxdump)");#else	name = stralloc("");	cmd = newstralloc(cmd, VXDUMP);	config = skip_argument;	is_rundump = 0;#endif	dumpkeys = vstralloc(level_str, "s", "f", NULL);	dbprintf(_("running \"%s%s %s 1048576 - %s\"\n"),		  cmd, name, dumpkeys, qdevice);    }    else#endif							/* } */#ifdef VDUMP						/* { */#ifdef DUMP						/* { */    if (strcmp(fstype, "advfs") == 0)#else							/* } { */    if (1)#endif							/* } */    {	name = stralloc(" (vdump)");	amfree(device);	amfree(qdevice);	device = amname_to_dirname(amdevice);	qdevice = quote_string(device);	dumpkeys = vstralloc(level_str, "b", "f", NULL);	dbprintf(_("running \"%s%s %s 60 - %s\"\n"),		  cmd, name, dumpkeys, qdevice);    }    else#endif							/* } */#ifdef DUMP						/* { */    if (1) {# ifdef USE_RUNDUMP					/* { */#  ifdef AIX_BACKUP					/* { */	name = stralloc(" (backup)");#  else							/* } { */	name = vstralloc(" (", DUMP, ")", NULL);#  endif						/* } */# else							/* } { */	name = stralloc("");	cmd = newstralloc(cmd, DUMP);        config = skip_argument;	is_rundump = 0;# endif							/* } */# ifdef AIX_BACKUP					/* { */	dumpkeys = vstralloc("-", level_str, "f", NULL);	dbprintf(_("running \"%s%s %s - %s\"\n"),		  cmd, name, dumpkeys, qdevice);# else							/* } { */#  ifdef HAVE_DUMP_ESTIMATE#    define PARAM_DUMP_ESTIMATE HAVE_DUMP_ESTIMATE#  else#    define PARAM_DUMP_ESTIMATE ""#  endif#  ifdef HAVE_HONOR_NODUMP#    define PARAM_HONOR_NODUMP "h"#  else#    define PARAM_HONOR_NODUMP ""#  endif	dumpkeys = vstralloc(level_str,			     PARAM_DUMP_ESTIMATE,			     PARAM_HONOR_NODUMP,			     "s", "f", NULL);#  ifdef HAVE_DUMP_ESTIMATE	stdoutfd = pipefd[1];#  endif#  ifdef HAVE_HONOR_NODUMP				/* { */	dbprintf(_("running \"%s%s %s 0 1048576 - %s\"\n"),		  cmd, name, dumpkeys, qdevice);#  else							/* } { */	dbprintf(_("running \"%s%s %s 1048576 - %s\"\n"),		  cmd, name, dumpkeys, qdevice);#  endif						/* } */# endif							/* } */    }    else#endif							/* } */    {	error(_("no dump program available"));	/*NOTREACHED*/    }    if (pipe(killctl) < 0) {	dbprintf(_("Could not create pipe: %s\n"), strerror(errno));	/* Message will be printed later... */	killctl[0] = killctl[1] = -1;    }    start_time = curclock();    switch(dumppid = fork()) {    case -1:	*errmsg = vstrallocf(_("cannot fork for killpgrp: %s"),			     strerror(errno));	dbprintf("%s\n", *errmsg);	amfree(dumpkeys);	amfree(cmd);	amfree(rundump_cmd);	amfree(device);	amfree(qdevice);	amfree(qdisk);	amfree(name);	amfree(fstype);	return -1;    default:	break;     case 0:	/* child process */	if(SETPGRP == -1)	    SETPGRP_FAILED();	else if (killctl[0] == -1 || killctl[1] == -1)	    dbprintf(_("Trying without killpgrp\n"));	else {	    switch(fork()) {	    case -1:		dbprintf(_("fork failed, trying without killpgrp\n"));		break;	    default:	    {		char *config;		char *killpgrp_cmd = vstralloc(amlibexecdir, "/killpgrp",					       versionsuffix(), NULL);		dbprintf(_("running %s\n"), killpgrp_cmd);		dup2(killctl[0], 0);		dup2(nullfd, 1);		dup2(nullfd, 2);		close(pipefd[0]);		close(pipefd[1]);		close(killctl[1]);		close(nullfd);		if (g_options->config)		    config = g_options->config;		else		    config = "NOCONFIG";		safe_fd(-1, 0);		execle(killpgrp_cmd, killpgrp_cmd, config, (char *)0,		       safe_env());		dbprintf(_("cannot execute %s: %s\n"),			  killpgrp_cmd, strerror(errno));		exit(-1);	    }	    case 0:  /* child process */		break;	    }	}	dup2(nullfd, 0);	dup2(stdoutfd, 1);	dup2(pipefd[1], 2);	aclose(pipefd[0]);	if (killctl[0] != -1)	    aclose(killctl[0]);	if (killctl[1] != -1)	    aclose(killctl[1]);	safe_fd(-1, 0);#ifdef XFSDUMP#ifdef DUMP	if (strcmp(fstype, "xfs") == 0)#else	if (1)#endif	    if (is_rundump)		execle(cmd, "rundump", config, "xfsdump", "-F", "-J", "-l",		       level_str, "-", device, (char *)0, safe_env());	    else		execle(cmd, "xfsdump", "-F", "-J", "-l",		       level_str, "-", device, (char *)0, safe_env());	else#endif#ifdef VXDUMP#ifdef DUMP	if (strcmp(fstype, "vxfs") == 0)#else	if (1)#endif	    if (is_rundump)		execle(cmd, "rundump", config, "vxdump", dumpkeys, "1048576",		       "-", device, (char *)0, safe_env());	    else		execle(cmd, "vxdump", dumpkeys, "1048576", "-",		       device, (char *)0, safe_env());	else#endif#ifdef VDUMP#ifdef DUMP	if (strcmp(fstype, "advfs") == 0)#else	if (1)#endif	    if (is_rundump)		execle(cmd, "rundump", config, "vdump", dumpkeys, "60", "-",		       device, (char *)0, safe_env());	    else		execle(cmd, "vdump", dumpkeys, "60", "-",		       device, (char *)0, safe_env());	else#endif#ifdef DUMP# ifdef AIX_BACKUP	    if (is_rundump)		execle(cmd, "rundump", config, "backup", dumpkeys, "-",		       device, (char *)0, safe_env());	    else		execle(cmd, "backup", dumpkeys, "-",		       device, (char *)0, safe_env());# else	    if (is_rundump) {		execle(cmd, "rundump", config, "dump", dumpkeys, #ifdef HAVE_HONOR_NODUMP		       "0",#endif		       "1048576", "-", device, (char *)0, safe_env());	    } else {		execle(cmd, "dump", dumpkeys, #ifdef HAVE_HONOR_NODUMP		       "0",#endif		       "1048576", "-", device, (char *)0, safe_env());	    }# endif#endif	{	    error(_("exec %s failed or no dump program available: %s"),		  cmd, strerror(errno));	    /*NOTREACHED*/	}    }    amfree(dumpkeys);    amfree(rundump_cmd);    aclose(pipefd[1]);    if (killctl[0] != -1)	aclose(killctl[0]);    dumpout = fdopen(pipefd[0],"r");    if (!dumpout) {	error(_("Can't fdopen: %s"), strerror(errno));	/*NOTREACHED*/    }    for(size = (off_t)-1; (line = agets(dumpout)) != NULL; free(line)) {	if (line[0] == '\0')	    continue;	dbprintf("%s\n", line);	size = handle_dumpline(line);	if(size > (off_t)-1) {	    amfree(line);	    while ((line = agets(dumpout)) != NULL) {	        if (line[0] != '\0')		    break;		amfree(line);	    }	    if (line != NULL) {		dbprintf("%s\n", line);	    }	    break;	}    }    amfree(line);    dbprintf(".....\n");    dbprintf(_("estimate time for %s level %d: %s\n"),	      qdisk,	      level,	      walltime_str(timessub(curclock(), start_time)));    if(size == (off_t)-1) {	*errmsg = vstrallocf(_("no size line match in %s%s output"),			     cmd, name);	dbprintf(_("%s for %s\n"),		  *errmsg, qdisk);	dbprintf(".....\n");	dbprintf(_("Run %s%s manually to check for errors\n"),		    cmd, name);    } else if(size == (off_t)0 && level == 0) {	dbprintf(_("possible %s%s problem -- is \"%s\" really empty?\n"),		  cmd, name, disk);	dbprintf(".....\n");    } else {	    dbprintf(_("estimate size for %s level %d: %lld KB\n"),	      qdisk,	      level,	      (long long)size);    }    if (killctl[1] != -1) {	dbprintf(_("asking killpgrp to terminate\n"));	aclose(killctl[1]);	for(s = 5; s > 0; --s) {	    sleep(1);	    if (waitpid(dumppid, NULL, WNOHANG) != -1)		goto terminated;	}    }        /*     * First, try to kill the dump process nicely.  If it ignores us     * for several seconds, hit it harder.     */    dbprintf(_("sending SIGTERM to process group %ld\n"), (long)dumppid);    if (kill(-dumppid, SIGTERM) == -1) {	dbprintf(_("kill failed: %s\n"), strerror(errno));    }    /* Now check whether it dies */    for(s = 5; s > 0; --s) {	sleep(1);	if (waitpid(dumppid, NULL, WNOHANG) != -1)	    goto terminated;    }    dbprintf(_("sending SIGKILL to process group %ld\n"), (long)dumppid);    if (kill(-dumppid, SIGKILL) == -1) {	dbprintf(_("kill failed: %s\n"), strerror(errno));    }    for(s = 5; s > 0; --s) {	sleep(1);	if (waitpid(dumppid, NULL, WNOHANG) != -1)	    goto terminated;    }    dbprintf(_("waiting for %s%s \"%s\" child\n"), cmd, name, qdisk);    waitpid(dumppid, &wait_status, 0);    if (WIFSIGNALED(wait_status)) {	*errmsg = vstrallocf(_("%s terminated with signal %d: see %s"),			     cmd, WTERMSIG(wait_status), dbfn());    } else if (WIFEXITED(wait_status)) {	if (WEXITSTATUS(wait_status) != 0) {	    *errmsg = vstrallocf(_("%s exited with status %d: see %s"),			         cmd, WEXITSTATUS(wait_status), dbfn());	} else {	    /* Normal exit */	}    } else {	*errmsg = vstrallocf(_("%s got bad exit: see %s"),			     cmd, dbfn());    }    dbprintf(_("after %s%s %s wait\n"), cmd, name, qdisk); terminated:    aclose(nullfd);    afclose(dumpout);    amfree(device);    amfree(qdevice);    amfree(qdisk);    amfree(fstype);    amfree(cmd);    amfree(name);    return size;}#ifdef SAMBA_CLIENToff_tgetsize_smbtar(    char       *disk,    char       *amdevice,    int		level,    option_t   *options,    char      **errmsg){    int pipefd = -1, nullfd = -1, passwdfd = -1;    pid_t dumppid;    off_t size;    FILE *dumpout;    char *tarkeys, *sharename, *user_and_password = NULL, *domain = NULL;    char *share = NULL, *subdir = NULL;    size_t lpass;    char *pwtext;    size_t pwtext_len;    char *line;    char *pw_fd_env;    times_t start_time;    char *error_pn = NULL;    char *qdisk = quote_string(disk);    amwait_t wait_status;    (void)options;	/* Quiet unused parameter warning */    error_pn = stralloc2(get_pname(), "-smbclient");    parsesharename(amdevice, &share, &subdir);    if (!share) {	amfree(share);	amfree(subdir);	set_pname(error_pn);	amfree(error_pn);	error(_("cannot parse disk entry %s for share/subdir"), qdisk);	/*NOTREACHED*/    }    if ((subdir) && (SAMBA_VERSION < 2)) {	amfree(share);	amfree(subdir);	set_pname(error_pn);	amfree(error_pn);	error(_("subdirectory specified for share %s but samba not v2 or better"), qdisk);	/*NOTREACHED*/    }    if ((user_and_password = findpass(share, &domain)) == NULL) {	if(domain) {	    memset(domain, '\0', strlen(domain));	    amfree(domain);	}	set_pname(error_pn);	amfree(error_pn);	error(_("cannot find password for %s"), disk);	/*NOTREACHED*/    }    lpass = strlen(user_and_password);    if ((pwtext = strchr(user_and_password, '%')) == NULL) {	memset(user_and_password, '\0', (size_t)lpass);	amfree(user_and_password);	if(domain) {	    memset(domain, '\0', strlen(domain));	    amfree(domain);	}	set_pname(error_pn);	amfree(error_pn);	error(_("password field not \'user%%pass\' for %s"), disk);	/*NOTREACHED*/    }    *pwtext++ = '\0';    pwtext_len = strlen(pwtext);    if ((sharename = makesharename(share, 0)) == NULL) {	memset(user_and_password, '\0', (size_t)lpass);	amfree(user_and_password);	if(domain) {	    memset(domain, '\0', strlen(domain));	    amfree(domain);	}	set_pname(error_pn);	amfree(error_pn);	error(_("cannot make share name of %s"), share);	/*NOTREACHED*/    }    if ((nullfd = open("/dev/null", O_RDWR)) == -1) {	memset(user_and_password, '\0', (size_t)lpass);	amfree(user_and_password);	if(domain) {	    memset(domain, '\0', strlen(domain));	    amfree(domain);	}	set_pname(error_pn);	amfree(error_pn);	amfree(sharename);	error(_("could not open /dev/null: %s\n"),	      strerror(errno));	/*NOTREACHED*/    }#if SAMBA_VERSION >= 2    if (level == 0)	tarkeys = "archive 0;recurse;du";    else	tarkeys = "archive 1;recurse;du";#else    if (level == 0)	tarkeys = "archive 0;recurse;dir";    else	tarkeys = "archive 1;recurse;dir";#endif    start_time = curclock();    if (pwtext_len > 0) {	pw_fd_env = "PASSWD_FD";    } else {	pw_fd_env = "dummy_PASSWD_FD";    }    dumppid = pipespawn(SAMBA_CLIENT, STDERR_PIPE|PASSWD_PIPE,	      &nullfd, &nullfd, &pipefd, 	      pw_fd_env, &passwdfd,	      "smbclient",	      sharename,	      "-d", SAMBA_DEBUG_LEVEL,	      *user_and_password ? "-U" : skip_argument,	      *user_and_password ? user_and_password : skip_argument,	      "-E",	      domain ? "-W" : skip_argument,	      domain ? domain : skip_argument,#if SAMBA_VERSION >= 2	      subdir ? "-D" : skip_argument,	      subdir ? subdir : skip_argument,#endif	      "-c", tarkeys,	      NULL);    if(domain) {	memset(domain, '\0', strlen(domain));	amfree(domain);    }    aclose(nullfd);    if(pwtext_len > 0 && fullwrite(passwdfd, pwtext, (size_t)pwtext_len) < 0) {	int save_errno = errno;	memset(user_and_password, '\0', (size_t)lpass);	amfree(user_and_password);	aclose(passwdfd);	set_pname(error_pn);	amfree(error_pn);	error(_("password write failed: %s"), strerror(save_errno));	/*NOTREACHED*/    }    memset(user_and_password, '\0', (size_t)lpass);    amfree(user_and_password);    aclose(passwdfd);    amfree(sharename);    amfree(share);    amfree(subdir);    amfree(error_pn);    dumpout = fdopen(pipefd,"r");    if (!dumpout) {	error(_("Can't fdopen: %s"), strerror(errno));	/*NOTREACHED*/    }    for(size = (off_t)-1; (line = agets(dumpout)) != NULL; free(line)) {	if (line[0] == '\0')	    continue;	dbprintf("%s\n", line);	size = handle_dumpline(line);	if(size > -1) {	    amfree(line);	    while ((line = agets(dumpout)) != NULL) {	        if (line[0] != '\0')		    break;		amfree(line);	    }	    if(line != NULL) {		dbprintf("%s\n", line);	    }	    break;	}    }    amfree(line);    dbprintf(".....\n");    dbprintf(_("estimate time for %s level %d: %s\n"),	      qdisk,	      level,	      walltime_str(timessub(curclock(), start_time)));    if(size == (off_t)-1) {	*errmsg = vstrallocf(_("no size line match in %s output"),			     SAMBA_CLIENT);	dbprintf(_("%s for %s\n"),		  *errmsg, qdisk);	dbprintf(".....\n");    } else if(size == (off_t)0 && level == 0) {	dbprintf(_("possible %s problem -- is \"%s\" really empty?\n"),		  SAMBA_CLIENT, disk);	dbprintf(".....\n");    }    dbprintf(_("estimate size for %s level %d: %lld KB\n"),	      qdisk,	      level,	      (long long)size);    kill(-dumppid, SIGTERM);    dbprintf(_("waiting for %s \"%s\" child\n"), SAMBA_CLIENT, qdisk);    waitpid(dumppid, &wait_status, 0);    if (WIFSIGNALED(wait_status)) {	*errmsg = vstrallocf(_("%s terminated with signal %d: see %s"),			     SAMBA_CLIENT, WTERMSIG(wait_status), dbfn());    } else if (WIFEXITED(wait_status)) {	if (WEXITSTATUS(wait_status) != 0) {	    *errmsg = vstrallocf(_("%s exited with status %d: see %s"),				 SAMBA_CLIENT, WEXITSTATUS(wait_status),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -