Sponsored Content
Full Discussion: Check existence of a login
Top Forums UNIX for Advanced & Expert Users Check existence of a login Post 302172149 by fpmurphy on Sunday 2nd of March 2008 09:40:35 PM
Old 03-02-2008
Quote:
So the shell knows whether a user exists or not... the question is how?
No, in general, a shell does not know whether a particular user exists or not. The operating system may know that information.

As for tilde expansion, here is the relevant section from ksh93 s+.
Code:
/*
 * This routine is used to resolve ~ expansion.
 * A ~ by itself is replaced with the users login directory.
 * A ~- is replaced by the previous working directory in shell.
 * A ~+ is replaced by the present working directory in shell.
 * If ~name  is replaced with login directory of name.
 * If string doesn't start with ~ or ~... not found then 0 returned.
 */

static char *sh_tilde(register const char *string)
{
        register char           *cp;
        register int            c;
        register struct passwd  *pw;
        register Namval_t *np=0;
        static Dt_t *logins_tree;
        if(*string++!='~')
                return(NIL(char*));
        if((c = *string)==0)
        {
                if(!(cp=nv_getval(nv_scoped(HOME))))
                        cp = getlogin();
                return(cp);
        }
        if((c=='-' || c=='+') && string[1]==0)
        {
                if(c=='+')
                        cp = nv_getval(nv_scoped(PWDNOD));
                else
                        cp = nv_getval(nv_scoped(OLDPWDNOD));
                return(cp);
        }
        if(logins_tree && (np=nv_search(string,logins_tree,0)))
                return(nv_getval(np));
        if(!(pw = getpwnam(string)))
                return(NIL(char*));
        if(!logins_tree)
                logins_tree = dtopen(&_Nvdisc,Dtbag);
        if(np=nv_search(string,logins_tree,NV_ADD))
                nv_putval(np, pw->pw_dir,0);
        return(pw->pw_dir);
}

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

check for FILES existence

hi, I have a list of filenames and I want to verify if they all exist. I know "if filename" would do the trick but how do I go about a list of files? thanks (3 Replies)
Discussion started by: mpang_
3 Replies

2. UNIX for Dummies Questions & Answers

Variable check for existence ?

Hi , I have a script wherein i have a For Loop. Within this for loop i create a variable and assign it a value. The script goes to a For Loop only if certain conditions are met , which means the variable may or may not exists. However down the line in the script i have to check if that... (2 Replies)
Discussion started by: samit_9999
2 Replies

3. Programming

C function to test existence of a login

Hi everybody, I need to check in C program whether a given login is known on the system. Is there any system function that could do this ? So far, all I could find is getpwnam(), which answers my problem by parsing the local password database. But won't work if a user is authenticated by... (2 Replies)
Discussion started by: xavier054
2 Replies

4. AIX

check for file existence

Hello I am having a requirement like if there is no file in the directory then i need a message to pop on after the execution of the script. My script basically does for File in `ls -t $DIRECTORY | tail -1`; if there is no file the DIRECTORY then the script is simply exiting with out... (2 Replies)
Discussion started by: dsdev_123
2 Replies

5. AIX

Check for File Existence

I have requirement where i need to search for files which start with SALESORDER and PURCHASEORDER. i need to process the files with SALESORDER first and then PURCHASEORDER. If SALESORDER files are not there i dont want to process PURCHASEORDER and i want to come out of script. I have written a code... (4 Replies)
Discussion started by: dsdev_123
4 Replies

6. Shell Programming and Scripting

check existence of the path

Hi How can I check if the path exist or not? echo "Enter path:"; read my_path; ##I should check whether my_path exists or not.... (5 Replies)
Discussion started by: tjay83
5 Replies

7. Shell Programming and Scripting

How to check for file existence?

i want to check if the file is in the directory or not, and also it should be handle error conditions, like missing files and report the error and exit. i did something like this: file ="hello" if !test -e "${file}" then echo "No such files exist!" exit 1 else do something....... fi ... (1 Reply)
Discussion started by: mingming88
1 Replies

8. UNIX for Dummies Questions & Answers

To check for existence of a file

I need to check for the existence of a file *.log in a specific directory using a perl script. Presently am not in that particular directory. So i am using chdir ("/path/to/my/file) And then i am using the -e in an if statement to check if it exists. if (-e $File) {......} $File contains the... (1 Reply)
Discussion started by: manutd
1 Replies

9. Shell Programming and Scripting

Check the Files existence

Hi I have a requirement to check whether the files exists, then it will call other steps in shell script. I did ls *.csv|wc -l if then checking the count of the files should be more than 1 then it will call other steps. I am getting the error that too many arguements as there n... (13 Replies)
Discussion started by: cnrj
13 Replies

10. Shell Programming and Scripting

File existence check

hi i wanted to check if the file exist or not(multiple files) DIRE=/home/V478 if ; then echo "file present" else echo "file not present" fi But i am getting the error as : [: unexpected operator/operand (3 Replies)
Discussion started by: ATWC
3 Replies
GETLOGIN(2)						      BSD System Calls Manual						       GETLOGIN(2)

NAME
getlogin, setlogin -- get/set login name SYNOPSIS
#include <unistd.h> char * getlogin(void); int setlogin(const char *name); DESCRIPTION
The getlogin() routine returns the login name of the user associated with the current session, as previously set by setlogin(). The name is normally associated with a login shell at the time a session is created, and is inherited by all processes descended from the login shell. (This is true even if some of those processes assume another user ID, for example when su(1) is used.) Setlogin() sets the login name of the user associated with the current session to name. This call is restricted to the super-user, and is normally used only when a new session is being created on behalf of the named user (for example, at login time, or when a remote shell is invoked). RETURN VALUES
If a call to getlogin() succeeds, it returns a pointer to a null-terminated string in a static buffer. If the name has not been set, it returns NULL. If a call to setlogin() succeeds, a value of 0 is returned. If setlogin() fails, a value of -1 is returned and an error code is placed in the global location errno. ERRORS
The following errors may be returned by these calls: [EFAULT] The name parameter gave an invalid address. [EINVAL] The name parameter pointed to a string that was too long. Login names are limited to MAXLOGNAME (from <sys/param.h>) characters, currently 12. [EPERM] The caller tried to set the login name and was not the super-user. SEE ALSO
setsid(2) BUGS
Login names are limited in length by setlogin(). However, lower limits are placed on login names elsewhere in the system (UT_NAMESIZE in <utmp.h>). In earlier versions of the system, getlogin() failed unless the process was associated with a login terminal. The current implementation (using setlogin()) allows getlogin to succeed even when the process has no controlling terminal. In earlier versions of the system, the value returned by getlogin() could not be trusted without checking the user ID. Portable programs should probably still make this check. HISTORY
The getlogin() function first appeared in 4.4BSD. 4.2 Berkeley Distribution June 9, 1993 4.2 Berkeley Distribution
All times are GMT -4. The time now is 08:38 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy