Пример #1
0
Файл: xdr.c Проект: PADL/krb5
/*
 * XDR enumerations
 */
bool_t
xdr_enum(XDR *xdrs, enum_t *ep)
{
#ifndef lint
	enum sizecheck { SIZEVAL };	/* used to find the size of an enum */

	/*
	 * enums are treated as ints
	 */
	switch (xdrs->x_op) {
	case XDR_ENCODE:
		VALGRIND_CHECK_DEFINED(*ep);
		break;
	default:
		break;
	}
	if (sizeof (enum sizecheck) == sizeof (long)) {
		return (xdr_long(xdrs, (long *)(void *)ep));
	} else if (sizeof (enum sizecheck) == sizeof (int)) {
		return (xdr_int(xdrs, (int *)(void *)ep));
	} else if (sizeof (enum sizecheck) == sizeof (short)) {
		return (xdr_short(xdrs, (short *)(void *)ep));
	} else {
		return (FALSE);
	}
#else
	(void) (xdr_short(xdrs, (short *)(void *)ep));
	return (xdr_long(xdrs, (long *)(void *)ep));
#endif
}
Пример #2
0
/*
 * Xdr routine to generate file handle reply
 */
int
xdr_fhs(XDR *xdrsp, caddr_t cp)
{
	struct fhreturn *fhrp = (struct fhreturn *)cp;
	long ok = 0, len, auth;

	if (!xdr_long(xdrsp, &ok))
		return (0);
	switch (fhrp->fhr_vers) {
	case 1:
		return (xdr_opaque(xdrsp, (caddr_t)&fhrp->fhr_fh, NFSX_V2FH));
	case 3:
		len = NFSX_V3FH;
		if (!xdr_long(xdrsp, &len))
			return (0);
		if (!xdr_opaque(xdrsp, (caddr_t)&fhrp->fhr_fh, len))
			return (0);
		auth = RPCAUTH_UNIX;
		len = 1;
		if (!xdr_long(xdrsp, &len))
			return (0);
		return (xdr_long(xdrsp, &auth));
	}
	return (0);
}
Пример #3
0
long *kdReadLongArray(char *filename, int bAscii, char *arrayName)
// Reads a tipsy array file
{
  XDR xdrs;
  FILE *fp;
  long np;
  long *arr, temp;
  int i;
  char arrFile[256];

  strcpy(arrFile, filename);
  strcat(arrFile, ".");
  strcat(arrFile, arrayName);

  fprintf(stderr, "array = %s\n", arrFile);

  if (!bAscii) {
    assert(sizeof(Real)==sizeof(float)); /* Otherwise, this XDR stuff
					    ain't gonna work */
    
    fp = fopen(arrFile, "r");
    xdrstdio_create(&xdrs, fp, XDR_DECODE);
    xdr_long(&xdrs, &np);
    arr = malloc(sizeof(float)*np);
    for(i=0;i<np;i++) xdr_long(&xdrs,&temp);
  }
  fclose(fp);
  
  return arr; 
}
Пример #4
0
/*
 * XDR enumerations
 */
bool_t
xdr_enum(
	XDR *xdrs,
	enum_t *ep)
{
#ifndef lint
	enum sizecheck { SIZEVAL };	/* used to find the size of an enum */

	/*
	 * enums are treated as ints
	 */
	if (sizeof (enum sizecheck) == sizeof (long)) {
		return (xdr_long(xdrs, (long *)ep));
	} else if (sizeof (enum sizecheck) == sizeof (int)) {
		return (xdr_int(xdrs, (int *)ep));
	} else if (sizeof (enum sizecheck) == sizeof (short)) {
		return (xdr_short(xdrs, (short *)ep));
	} else {
		return (FALSE);
	}
#else
	(void) (xdr_short(xdrs, (short *)ep));
	(void) (xdr_int(xdrs, (int *)ep));
	return (xdr_long(xdrs, (long *)ep));
#endif
}
Пример #5
0
bool_t xdr_Create_LinkParms (XDR *xdrs, Create_LinkParms *objp)
{
#if defined(SOLARIS) && !defined(_LP64)
  register long *buf;
#else
  register int32_t *buf;
#endif

  if (xdrs->x_op == XDR_ENCODE) {
    buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
    if (buf == NULL) {
      if (!xdr_long (xdrs, &objp->clientId))
        return FALSE;
      if (!xdr_bool (xdrs, &objp->lockDevice))
        return FALSE;
      if (!xdr_u_long (xdrs, &objp->lock_timeout))
        return FALSE;

    } else {
      IXDR_PUT_INT32(buf, objp->clientId);
      IXDR_PUT_BOOL(buf, objp->lockDevice);
      IXDR_PUT_U_INT32(buf, objp->lock_timeout);
    }
    if (!xdr_string (xdrs, &objp->device, ~0))
      return FALSE;
    return TRUE;
  } else if (xdrs->x_op == XDR_DECODE) {
    buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
    if (buf == NULL) {
      if (!xdr_long (xdrs, &objp->clientId))
        return FALSE;
      if (!xdr_bool (xdrs, &objp->lockDevice))
        return FALSE;
      if (!xdr_u_long (xdrs, &objp->lock_timeout))
        return FALSE;

    } else {
      objp->clientId = IXDR_GET_INT32(buf);
      objp->lockDevice = IXDR_GET_BOOL(buf);
      objp->lock_timeout = IXDR_GET_U_INT32(buf);
    }
    if (!xdr_string (xdrs, &objp->device, ~0))
      return FALSE;
    return TRUE;
  }

  if (!xdr_long (xdrs, &objp->clientId))
    return FALSE;
  if (!xdr_bool (xdrs, &objp->lockDevice))
    return FALSE;
  if (!xdr_u_long (xdrs, &objp->lock_timeout))
    return FALSE;
  if (!xdr_string (xdrs, &objp->device, ~0))
    return FALSE;
  return TRUE;
}
Пример #6
0
bool_t
xdr_longint (XDR *xdrs, longint *objp)
{
	register int32_t *buf;

	 if (!xdr_long (xdrs, &objp->a))
		 return FALSE;
	 if (!xdr_long (xdrs, &objp->b))
		 return FALSE;
	return TRUE;
}
Пример #7
0
bool_t
xdr_timestampt(XDR *xdrs, timestampt *tvp)
{
        log_assert(pIf(xdrs->x_op == XDR_ENCODE,
                        (tvp->tv_sec  >= TS_ZERO.tv_sec
                        && tvp->tv_usec >= TS_ZERO.tv_usec
                        && tvp->tv_sec  <= TS_ENDT.tv_sec
                        && tvp->tv_usec <= TS_ENDT.tv_usec)));

        /*
         * TV_INT
         * On DEC alpha, tvp->tv_sec is an int.
         * On IRIX, tvp->tv_sec is an time_t, which is 32 bits,
         * which may be  a 'long' or an 'int'.
         * The use of intermediate variables is an attempt
         * to cover all bases.
         */
        /* TODO: use the preprocessor to determine this */
        
        if(xdrs->x_op == XDR_ENCODE)
        {
                long tv_sec = (long)tvp->tv_sec; /* const */
                if (!xdr_long(xdrs, &tv_sec)) {
                         return (FALSE);
                }
        }
        else
        {
                long tv_sec = TS_NONE.tv_sec;
                if (!xdr_long(xdrs, &tv_sec)) {
                        return (FALSE);
                }
                tvp->tv_sec = tv_sec; /* ignore any warning */
                
        }

        if(xdrs->x_op == XDR_ENCODE)
        {
                long tv_usec = (long)tvp->tv_usec; /* const */
                if (!xdr_long(xdrs, &tv_usec)) {
                         return (FALSE);
                }
        }
        else
        {
                long tv_usec = TS_NONE.tv_usec;
                if (!xdr_long(xdrs, &tv_usec)) {
                         return (FALSE);
                }
                tvp->tv_usec = tv_usec; /* ignore any warning */
        }

        return (TRUE);
}
Пример #8
0
int xdr_send_data(XDR * xdrs, struct data *buffer)
{
	int i, rc;
	char *p;

	rc = xdr_long(xdrs, &buffer->address);
	rc = rc && xdr_long(xdrs, &buffer->request_id);
	rc = rc && xdr_long(xdrs, &buffer->data_length);
	for (i = 0, p = buffer->data; rc && i < buffer->data_length; i++, p++)
		rc = xdr_char(xdrs, p);
	return (rc);
}
Пример #9
0
int xdr_receive_data(XDR * xdrs, struct data **buffer)
{
	struct data *bp;
	int i, rc;
	char *p;

	bp = *buffer = (struct data *)malloc(sizeof(struct data));
	rc = xdr_long(xdrs, &(bp->address));
	rc = rc && xdr_long(xdrs, &bp->request_id);
	rc = rc && xdr_long(xdrs, &bp->data_length);
	p = (*buffer)->data = (char *)malloc(bp->data_length);
	for (i = 0; rc && i < bp->data_length; p++, i++)
		rc = xdr_char(xdrs, p);
	return (rc);
}
Пример #10
0
/*
 * XDR integers
 */
bool_t
xdr_int(XDR *xdrs, int *ip)
{

#ifdef lint
	(xdr_short(xdrs, (short *)ip));
	return (xdr_long(xdrs, (long *)ip));
#else
	if (sizeof (int) == sizeof (long)) {
		return (xdr_long(xdrs, (long *)ip));
	} else {
		return (xdr_short(xdrs, (short *)ip));
	}
#endif
}
Пример #11
0
void
ltspfs_getattr (int sockfd, XDR *in)
{
  XDR         out;
  char        path[PATH_MAX];
  char 	      output[LTSP_MAXBUF];
  int         i;
  struct stat stbuf;

  if (get_fn(sockfd, in, path)) {
    if (debug)
      info ("get_fn failed\n");
    eacces(sockfd);
    return;
  }

  if (lstat (path, &stbuf) == -1) {
    status_return(sockfd, FAIL);
    return;
  }

  xdrmem_create(&out, output, LTSP_MAXBUF, XDR_ENCODE);
  i = 0;
  xdr_int(&out, &i);	 			/* First, the dummy length */
  xdr_int(&out, &i);				/* Then the 0 status return */
  xdr_u_longlong_t(&out, &(stbuf.st_dev));	/* device */
  xdr_u_longlong_t(&out, &(stbuf.st_ino));	/* inode */
  xdr_u_int(&out, &(stbuf.st_mode));		/* protection */
  xdr_u_int(&out, &(stbuf.st_nlink));		/* number of hard links */
  xdr_u_int(&out, &(stbuf.st_uid));		/* user ID of owner */
  xdr_u_int(&out, &(stbuf.st_gid));		/* group ID of owner */
  xdr_u_longlong_t(&out, &(stbuf.st_rdev));	/* device type */
  xdr_longlong_t(&out, &(stbuf.st_size));	/* total size, in bytes */
  xdr_long(&out, &(stbuf.st_blksize));		/* blocksize for fs I/O */
  xdr_longlong_t(&out, &(stbuf.st_blocks));	/* number of blocks allocated */
  xdr_long(&out, &(stbuf.st_atime));		/* time of last access */
  xdr_long(&out, &(stbuf.st_mtime));		/* time of last modification */
  xdr_long(&out, &(stbuf.st_ctime));		/* time of last status change */
  i = xdr_getpos(&out);				/* Get our position */
  xdr_setpos(&out, 0);				/* Rewind to the beginning */
  xdr_int(&out, &i);				/* Rewrite with proper length */
  xdr_destroy(&out);

  if (debug)
    info("returning OK");

  writen(sockfd, output, i);
}
Пример #12
0
bool_t
xdr_cprinc3_arg(XDR *xdrs, cprinc3_arg *objp)
{
	if (!xdr_ui_4(xdrs, &objp->api_version)) {
		return (FALSE);
	}
	if (objp->api_version == KADM5_API_VERSION_1) {
		if (!xdr_kadm5_principal_ent_rec_v1(xdrs, &objp->rec)) {
			return (FALSE);
		}
	} else {
		if (!xdr_kadm5_principal_ent_rec(xdrs, &objp->rec)) {
			return (FALSE);
		}
	}
	if (!xdr_long(xdrs, &objp->mask)) {
		return (FALSE);
	}
	if (!xdr_array(xdrs, (caddr_t *)&objp->ks_tuple,
		       (unsigned int *)&objp->n_ks_tuple, ~0,
		       sizeof(krb5_key_salt_tuple),
		       xdr_krb5_key_salt_tuple)) {
		return (FALSE);
	}
	if (!xdr_nullstring(xdrs, &objp->passwd)) {
		return (FALSE);
	}
	return (TRUE);
}
Пример #13
0
static bool_t xdr_counted_string( XDR *xdrs, char **p)
{
  int mode;
  long int length;

  mode = (xdrs->x_op == XDR_DECODE);

  /* If writing, obtain the length */
  if( !mode)
    length = strlen(*p);

  /* Transfer the string length */
  if( !xdr_long(xdrs, &length))
    return 0;

  //  printf("length = %ld\n", length);

  /* If reading, obtain room for the string */
  if (mode)
    {
      *p = (char *) malloc( (length + 1) * sizeof(char) );
      (*p)[length] = '\0'; /* Null termination */
    }

  /* If the string length is nonzero, transfer it */
  return(length ? xdr_string(xdrs, p, length) : 1);
}
Пример #14
0
main ()
{
        FILE *fp;                  /*указатель файла */
        XDR xdrs;                  /*дескpиптоp XDR */
        long val1=10;              /*целое */
        float val2=4.456789;       /*с плавающей точкой */
        char val3s[] = "qwerty123456uvwxyz"; /* 18+1 bytes null terminated string */
        char *val3;
        int r;
        val3 = malloc(20);
        strcpy(val3,val3s);
/*откpытие файла на запись */
        fp = fopen(FIC, "w");
/*      создание потока XDR для кодиpования */
        xdrstdio_create(&xdrs, fp, XDR_ENCODE);
/*запись целого */
        xdr_long(&xdrs, &val1);
/*запись числа с плавающей точкой */
        xdr_float(&xdrs, &val2);
/* write string */
        r = xdr_string(&xdrs, &val3, strlen(val3));
        printf("r=%d\n",r);
        free(val3);
        fclose(fp);
        exit(0);
}
Пример #15
0
bool_t
xdr_int32(XDR *xdrs, int32 *objp)
{
	if (!xdr_long(xdrs, objp))
		return FALSE;
	return TRUE;
}
Пример #16
0
bool_t
xdr_osa_princ_ent_rec(XDR *xdrs, osa_princ_ent_t objp)
{
    switch (xdrs->x_op) {
    case XDR_ENCODE:
	 objp->version = OSA_ADB_PRINC_VERSION_1;
	 /* fall through */
    case XDR_FREE:
	 if (!xdr_int(xdrs, &objp->version))
	      return FALSE;
	 break;
    case XDR_DECODE:
	 if (!xdr_int(xdrs, &objp->version))
	      return FALSE;
	 if (objp->version != OSA_ADB_PRINC_VERSION_1)
	      return FALSE;
	 break;
    }

    if (!xdr_nullstring(xdrs, &objp->policy))
	return (FALSE);
    if (!xdr_long(xdrs, &objp->aux_attributes))
	return (FALSE);
    if (!xdr_u_int(xdrs, &objp->old_key_next))
	return (FALSE);
    if (!xdr_krb5_kvno(xdrs, &objp->admin_history_kvno))
	return (FALSE);
    if (!xdr_array(xdrs, (caddr_t *) &objp->old_keys,
		   (unsigned int *) &objp->old_key_len, ~0,
		   sizeof(osa_pw_hist_ent),
		   xdr_osa_pw_hist_ent))
	return (FALSE);
    return (TRUE);
}
Пример #17
0
bool_t
xdr_int32(register XDR *xdrs, int32 *objp)
{
	if (!xdr_long(xdrs, objp))
		return (FALSE);
	return (TRUE);
}
Пример #18
0
/*
 * Xdr routine to get an id number
 */
static bool_t
xdr_getid(XDR *xdrsp, caddr_t cp)
{
	struct info *ifp = (struct info *)cp;

	return (xdr_long(xdrsp, &ifp->id));
}
Пример #19
0
bool_t
xdr_time_type(XDR *xdrs, time_type *objp)
{
  if (!xdr_long(xdrs, (long *) objp)) {
    return (FALSE);
  }
  return (TRUE);
}
Пример #20
0
bool_t
xdr_primo_in (XDR *xdrs, primo_in *objp)
{
    register int32_t *buf;

    if (!xdr_long (xdrs, &objp->primo))
        return FALSE;
    return TRUE;
}
Пример #21
0
/*
 * Xdr routine to return the value.
 */
static bool_t
xdr_retval(XDR *xdrsp, caddr_t cp)
{
	struct info *ifp = (struct info *)cp;
	long val;

	val = ifp->retval;
	return (xdr_long(xdrsp, &val));
}
Пример #22
0
bool_t xdr_xdr (XDR *xdrs, xdr *objp) {
        register int32_t *buf;

         if (!xdr_long (xdrs, &objp->long_arg))
                 return FALSE;
         if (!xdr_string (xdrs, &objp->string_arg, 4096))
                 return FALSE;
        return TRUE;
}
Пример #23
0
bool_t
xdr_square_in (XDR *xdrs, square_in *objp)
{
	register int32_t *buf;

	 if (!xdr_long (xdrs, &objp->arg1))
		 return FALSE;
	return TRUE;
}
Пример #24
0
bool_t
xdr_square_out (XDR *xdrs, square_out *objp)
{
	register int32_t *buf;

	 if (!xdr_long (xdrs, &objp->res1))
		 return FALSE;
	return TRUE;
}
bool_t
xdr_rpc_int32 (XDR *xdrs, rpc_int32 *objp)
{
    register int32_t *buf;

    if (!xdr_long (xdrs, objp))
        return FALSE;
    return TRUE;
}
Пример #26
0
bool_t xdr_Device_ReadResp (XDR *xdrs, Device_ReadResp *objp)
{
  if (!xdr_Device_ErrorCode (xdrs, &objp->error))
    return FALSE;
  if (!xdr_long (xdrs, &objp->reason))
    return FALSE;
  if (!xdr_bytes (xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, ~0))
    return FALSE;
  return TRUE;
}
Пример #27
0
bool_t
xdr_nlm_notify(XDR *xdrs, nlm_notify *objp)
{

	if (!xdr_string(xdrs, &objp->name, MAXNAMELEN))
		return (FALSE);
	if (!xdr_long(xdrs, &objp->state))
		return (FALSE);
	return (TRUE);
}
Пример #28
0
bool_t
xdr_msg_id (XDR *xdrs, msg_id *objp)
{
	register int32_t *buf;

	 if (!xdr_long (xdrs, &objp->hostid))
		 return FALSE;
	 if (!xdr_int (xdrs, &objp->seqno))
		 return FALSE;
	return TRUE;
}
Пример #29
0
bool_t xdr_getprivs_ret(XDR *xdrs, getprivs_ret *objp)
{
	if (!xdr_ui_4(xdrs, &objp->api_version)) {
		return (FALSE);
	}
     if (! xdr_kadm5_ret_t(xdrs, &objp->code) ||
	 ! xdr_long(xdrs, &objp->privs))
	  return FALSE;

     return TRUE;
}
Пример #30
0
bool_t
xdr_image_descriptor (XDR *xdrs, image_descriptor *objp)
{
	register int32_t *buf;

	 if (!xdr_long (xdrs, &objp->Size))
		 return FALSE;
	 if (!xdr_bytes (xdrs, (char **)&objp->Buffer.Buffer_val, (u_int *) &objp->Buffer.Buffer_len, ~0))
		 return FALSE;
	return TRUE;
}