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

📄 passwddb.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* $Id: passwddb.c,v 1.7 2002/08/02 19:26:57 adam Exp $   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002   Index Data ApsThis file is part of the Zebra server.Zebra is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.Zebra is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with Zebra; see the file LICENSE.zebra.  If not, write to theFree Software Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.*/#ifdef WIN32#else#include <unistd.h>#endif#include <string.h>#include <stdio.h>#ifndef USE_CRYPT#define USE_CRYPT 0#endif#if USE_CRYPT#include <crypt.h>#endif#include <yaz/log.h>#include <yaz/xmalloc.h>#include <passwddb.h>struct passwd_entry {	char *name;	char *des;	struct passwd_entry *next;};struct passwd_db {	struct passwd_entry *entries;};Passwd_db passwd_db_open (void){	struct passwd_db *p = (struct passwd_db *) xmalloc (sizeof(*p));	p->entries = 0;	return p;}static int get_entry (const char **p, char *dst, int max){		int i = 0;	while ((*p)[i] != ':' && (*p)[i])		i++;	if (i >= max)		i = max-1;	if (i)		memcpy (dst, *p, i);	dst[i] = '\0';	*p += i;	if (*p)		(*p)++;	return i;}int passwd_db_file (Passwd_db db, const char *fname){	FILE *f;	char buf[1024];	f = fopen (fname, "r");	if (!f)		return -1;	while (fgets (buf, sizeof(buf)-1, f))	{		struct passwd_entry *pe;		char name[128];		char des[128];		char *p;		const char *cp = buf;		if ((p = strchr (buf, '\n')))			*p = '\0';		get_entry (&cp, name, 128);		get_entry (&cp, des, 128);		pe = (struct passwd_entry *) xmalloc (sizeof(*pe));		pe->name = xstrdup (name);		pe->des = xstrdup (des);		pe->next = db->entries;		db->entries = pe;	}	fclose (f);	return 0;}void passwd_db_close (Passwd_db db){	struct passwd_entry *pe = db->entries;	while (pe)	{		struct passwd_entry *pe_next = pe->next;			xfree (pe->name);		xfree (pe->des);		xfree (pe);		pe = pe_next;	}	xfree (db);}void passwd_db_show (Passwd_db db){	struct passwd_entry *pe;	for (pe = db->entries; pe; pe = pe->next)		logf (LOG_LOG,"%s:%s", pe->name, pe->des);}int passwd_db_auth (Passwd_db db, const char *user, const char *pass){	struct passwd_entry *pe;#if USE_CRYPT	char salt[3];	const char *des_try;#endif	for (pe = db->entries; pe; pe = pe->next)		if (user && !strcmp (user, pe->name))			break;	if (!pe)		return -1;#if USE_CRYPT	if (strlen (pe->des) < 3)		return -3;	if (!pass)	    return -2;	memcpy (salt, pe->des, 2);	salt[2] = '\0';		des_try = crypt (pass, salt);	if (strcmp (des_try, pe->des))		return -2;#else	if (strcmp (pe->des, pass))		return -2;#endif	return 0;	}

⌨️ 快捷键说明

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