Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

I want to make this program run on solaris machine .....

Posted on 2004-08-08
2
Medium Priority
?
356 Views
Last Modified: 2013-12-05
Hi guys,

 The following program is for getting credentials......

 I have some problems facing when run on solaris machine ......

 
Program is following :---->


#include   <stdio.h>
#include   <stdlib.h>
#include   <sys/socket.h>
#include   <errno.h>
#include   <sys/types.h>
#include   <sys/uio.h>
#include   <signal.h>
#include   <time.h>
#include   <sys/types.h>
#include   <stdlib.h>
#include   <pthread.h>
#include   <sys/param.h>
#include   <sys/cred.h>


ssize_t recv_cred(int, void *, size_t, struct cred *);

main()
{
  int             fd[2], on, n;
  char            buf[100];
  struct cred    cred;
 
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) < 0)
    perror("Socketpair Error");
 
  /* must set the socket option on the *receiving* socket */
  on = 1;
  setsockopt(fd[1], 0, LOCAL_CREDS, &on, sizeof(on));
 
  write(fd[0], "hello, world\n", 13);
 
  if ( (n = recv_cred(fd[1], buf, sizeof(buf), &cred)) < 0)
    perror("Recv_Cred Error");
 
  else if (n == 0)
    perror("Recv_Cred, Unexpected EOF");
 
  buf[n] = 0;                     /* null terminate */
  printf("data: %s", buf);
 
  if (cred.cr_ngroups == 0)
    printf("[No CREDENTIALS Returned]\n");
 
  else
    {
      printf(" Real User ID = %d\n", cred.cr_ruid);
      printf(" Real Group ID = %d\n", cred.cr_rgid);
      //      printf(" Login Name = %-*s\n", MAXLOGNAME, cred.cr_login);
      printf(" Effective User ID = %d\n", cred.cr_uid);
      printf(" Effective Group ID = %d\n", cred.cr_gid);
      printf(" %d Supplementary Groups:", cred.cr_ngroups - 1);
     
      for (n = 1; n < cred.cr_ngroups; n++)   /* [0] is the egid */
      printf(" %d", cred.cr_groups[n]);
     
      printf("\n");
    }
 
  exit(0);
 
}


#define CONTROL_LEN     (sizeof(struct cmsghdr) + sizeof(struct cred))


ssize_t
recv_cred(int fd, void *ptr, size_t nbytes, struct cred *credptr)
{
  struct msghdr   msg;
  struct iovec    iov[1];
  char            control[CONTROL_LEN + 20];
  int             n;
 
  msg.msg_name = NULL;
  msg.msg_namelen = 0;
 
  iov[0].iov_base = ptr;
  iov[0].iov_len = nbytes;
 
  msg.msg_iov = iov;
  msg.msg_iovlen = 1;

  msg.msg_control = control;
  msg.msg_controllen = sizeof(control);
  msg.msg_flags = 0;

  if ( (n = recvmsg(fd, &msg, 0)) < 0)
    return(n);
 
  credptr->cr_ngroups = 0;       /* indicates no credentials returned */
 
  if (credptr && msg.msg_controllen > 0)
    {
      struct cmsghdr  *cmptr = (struct cmsghdr *) control;
     
      if (cmptr->cmsg_len != sizeof(struct cmsghdr) + sizeof(struct cred))
      err_quit("control length = %d", cmptr->cmsg_len);
     
      if (cmptr->cmsg_level != SOL_SOCKET)
      err_quit("control level != SOL_SOCKET");
     
      if (cmptr->cmsg_type != SCM_CREDS)
      err_quit("control type != SCM_CREDS");
     
      memcpy(credptr, CMSG_DATA(cmptr), sizeof(struct cred));
    }

  return(n);
}


To compile on soalris :

 cc -o tfcred02 tfcred02.c -lsocket -lnsl -lrt

To Run :

  ./tfcred02


Am getting some errors:

They are following :---->

[ab1221@eagles ~/AdvNetProg/Assign3]$ cc -o tfcred02 tfcred02.c -lsocket -lnsl -lrt

tfcred02.c: In function `main':
tfcred02.c:30: error: `LOCAL_CREDS' undeclared (first use in this function)
tfcred02.c:30: error: (Each undeclared identifier is reported only once
tfcred02.c:30: error: for each function it appears in.)
tfcred02.c: In function `recv_cred':
tfcred02.c:86: error: structure has no member named `msg_control'
tfcred02.c:87: error: structure has no member named `msg_controllen'
tfcred02.c:88: error: structure has no member named `msg_flags'
tfcred02.c:95: error: structure has no member named `msg_controllen'
tfcred02.c:105: error: `SCM_CREDS' undeclared (first use in this function)
tfcred02.c:108: warning: passing arg 2 of `memcpy' makes pointer from integer without a cast

[ab1221@eagles ~/AdvNetProg/Assign3]$


Pls help me in this program..

bye
aman

0
Comment
Question by:amankhan
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 38

Accepted Solution

by:
yuzh earned 1000 total points
ID: 11749869
Please have a look at the following docs:
   "Secure interprocess communication"
     http://cr.yp.to/docs/secureipc.html

   "Secure UNIX Programming FAQ":
   http://www.securitymap.net/sdm/docs/faq/secure-faq.html
   http://www.uni-giessen.de/faq/archiv/unix-faq.programmer.secure-programming/msg00000.html
0
 
LVL 1

Expert Comment

by:eric_j_kropf
ID: 11754948
In the :

setsockopt(fd[1], 0, LOCAL_CREDS, &on, sizeof(on));

LOCAL_CREDS is not defined in the code.

int setsockopt( SOCKET s,  int level,  int optname,  const char* optval,  int optlen);

Hope this helps.
0

Featured Post

Survive A High-Traffic Event with Percona

Your application or website rely on your database to deliver information about products and services to your customers. You can’t afford to have your database lose performance, lose availability or become unresponsive – even for just a few minutes.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why Shell Scripting? Shell scripting is a powerful method of accessing UNIX systems and it is very flexible. Shell scripts are required when we want to execute a sequence of commands in Unix flavored operating systems. “Shell” is the command line i…
The purpose of this article is to demonstrate how we can use conditional statements using Python.
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
Suggested Courses

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question