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

📄 findpass.c

📁 开源备份软件源码 AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that a
💻 C
字号:
/* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1998 University of Maryland at College Park * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of U.M. not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission.  U.M. makes no representations about the * suitability of this software for any purpose.  It is provided "as is" * without express or implied warranty. * * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Authors: the Amanda Development Team.  Its members are listed in a * file named AUTHORS, in the root directory of this distribution. *//* * $Id: findpass.c,v 1.13 2006/05/25 01:47:11 johnfranks Exp $ * * Support routines for Amanda SAMBA support */#include "amanda.h"#include "findpass.h"#include "util.h"/* * Find the Samba password and optional domain for a given disk. * Returns pointers into an alloc-ed area.  The caller should clear them * as soon as reasonable. */char *findpass(    char *	disk,    char **	domain){  FILE *fp;  static char *buffer = NULL;  char *s, *d, *pw = NULL;  int ch;  char *qname;  *domain = NULL;				/* just to be sure */  if ( (fp = fopen("/etc/amandapass", "r")) ) {    amfree(buffer);    for (; (buffer = agets(fp)) != NULL; free(buffer)) {      if (buffer[0] == '\0')	continue;      s = buffer;      ch = *s++;      skip_whitespace(s, ch);			/* find start of disk name */      if (!ch || ch == '#') {	continue;      }      qname = s-1;				/* start of disk name */      skip_quoted_string(s, ch);      if (ch && ch != '#') {	s[-1] = '\0';				/* terminate disk name */	d = unquote_string(qname);	if ((strcmp(d,"*") == 0) || (strcmp(disk, d) == 0)) {	  skip_whitespace(s, ch);		/* find start of password */	  if (ch && ch != '#') {	    pw = s - 1;				/* start of password */	    skip_non_whitespace_cs(s, ch);	    s[-1] = '\0';			/* terminate password */	    pw = stralloc(pw);	    skip_whitespace(s, ch);		/* find start of domain */	    if (ch && ch != '#') {	      *domain = s - 1;			/* start of domain */	      skip_non_whitespace_cs(s, ch);	      s[-1] = '\0';			/* terminate domain */	      *domain = stralloc(*domain);	    }	  }	  amfree(d);	  break;	}	amfree(d);      }    }    afclose(fp);  }  return pw;}/*  * Convert an amanda disk-name into a Samba sharename, * optionally for a shell execution (\'s are escaped). * Returns a new name alloc-d that the caller is responsible * for free-ing. */char *makesharename(    char *	disk,    int		shell){  char *buffer;  size_t buffer_size;  char *s;  int ch;    buffer_size = 2 * strlen(disk) + 1;		/* worst case */  buffer = alloc(buffer_size);  s = buffer;  while ((ch = *disk++) != '\0') {    if (s >= buffer+buffer_size-2) {		/* room for escape */      amfree(buffer);				/* should never happen */      return NULL;				/* buffer not big enough */    }    if (ch == '/') {      ch = '\\';				/* convert '/' to '\\' */    }    if (ch == '\\' && shell) {      *s++ = '\\';				/* add escape for shell */    }    *s++ = ch;  }  *s = '\0';					/* terminate the share name */  return buffer;}/* * find out if the samba sharename specifies both a share * and a target subdirectory or just a share * * the caller is expected to release share & subdir */voidparsesharename(    char *	disk,    char **	share,    char **	subdir){    char *ch=NULL;    int slashcnt=0;    *share = NULL;    *subdir = NULL;    if (!disk) {	return;    }    *share = stralloc(disk);    ch = *share;    *subdir = NULL;    while (*ch != '\0') {	if (*ch == '/') {slashcnt++;}	if (slashcnt == 4) {	    *ch = '\0';	    *subdir = stralloc(++ch);	    return;	}	ch++;    }}

⌨️ 快捷键说明

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