On Sat, Jul 07, 2012 at 08:14:10PM +0200, Noël Köthe wrote: > Am Dienstag, den 03.07.2012, 13:26 +0400 schrieb Alexander V. Lukyanov: > > > > for example, if I have PC A, B with the same master.passwd. > > > They all have one line: > > > 9100075:*:3018:1001::0:0:REALNAME:/home/9100075:/usr/local/bin/bash > > > => username = 9100075, uid = 3018. and uid=9100075 doesn't exist. > > > > I think it is forbidden to have a user name starting with a digit. > > pwck should warn about it. > > afaik this limitation isn't true anymore:
Please try this patch. -- Alexander.
diff --git a/src/IdNameCache.cc b/src/IdNameCache.cc index 8e71060..ccc31be 100644 --- a/src/IdNameCache.cc +++ b/src/IdNameCache.cc @@ -67,8 +67,6 @@ IdNamePair *IdNameCache::lookup(int id) } IdNamePair *IdNameCache::lookup(const char *name) { - if(isdigit((unsigned char)*name)) - return lookup(atoi(name)); unsigned h=hash(name); for(IdNamePair *scan=table_id[h]; scan; scan=scan->next) if(!xstrcmp(name,scan->name)) @@ -92,8 +90,6 @@ const char *IdNameCache::Lookup(int id) } int IdNameCache::Lookup(const char *name) { - if(isdigit((unsigned char)*name)) - return atoi(name); return lookup(name)->id; } IdNameCache::IdNameCache() @@ -137,19 +133,27 @@ IdNamePair *GroupCache::get_record(int id) return 0; return new IdNamePair(p->gr_gid,p->gr_name); } + +IdNamePair *IdNameCache::get_record(const char *name) +{ + int id,n; + if(sscanf(name,"%d%n",&id,&n)==1 && !name[n]) + return new IdNamePair(id,name); + return 0; +} IdNamePair *PasswdCache::get_record(const char *name) { struct passwd *p=getpwnam(name); - if(!p) - return 0; - return new IdNamePair(p->pw_uid,name); + if(p) + return new IdNamePair(p->pw_uid,name); + return IdNameCache::get_record(name); } IdNamePair *GroupCache::get_record(const char *name) { struct group *p=getgrnam(name); - if(!p) - return 0; - return new IdNamePair(p->gr_gid,name); + if(p) + return new IdNamePair(p->gr_gid,name); + return IdNameCache::get_record(name); } PasswdCache *PasswdCache::instance; diff --git a/src/IdNameCache.h b/src/IdNameCache.h index 82b478e..9e655cc 100644 --- a/src/IdNameCache.h +++ b/src/IdNameCache.h @@ -53,7 +53,7 @@ class IdNameCache : public SMTask protected: virtual IdNamePair *get_record(int id)=0; - virtual IdNamePair *get_record(const char *name)=0; + virtual IdNamePair *get_record(const char *name); IdNamePair *lookup(int id); IdNamePair *lookup(const char *id);
_______________________________________________ lftp mailing list lftp@uniyar.ac.ru http://univ.uniyar.ac.ru/mailman/listinfo/lftp