Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
MUNGE_CTX(3)		   MUNGE Uid 'N' Gid Emporium		    MUNGE_CTX(3)

NAME
     munge_ctx_create,	munge_ctx_copy,  munge_ctx_destroy,  munge_ctx_strerror,
     munge_ctx_get, munge_ctx_set - MUNGE context functions

SYNOPSIS
     #include <munge.h>

     munge_ctx_t munge_ctx_create (void);

     munge_ctx_t munge_ctx_copy (munge_ctx_t ctx);

     void munge_ctx_destroy (munge_ctx_t ctx);

     const char * munge_ctx_strerror (munge_ctx_t ctx);

     munge_err_t munge_ctx_get (munge_ctx_t ctx, munge_opt_t opt, ...);

     munge_err_t munge_ctx_set (munge_ctx_t ctx, munge_opt_t opt, ...);

     cc `pkg-config --cflags --libs munge` -o foo foo.c

DESCRIPTION
     The munge_ctx_create() function creates and returns a new MUNGE context, or
     NULL on error.

     The munge_ctx_copy() function copies the context  ctx  and  returns  a  new
     MUNGE context, or NULL on error.

     The munge_ctx_destroy() function destroys the context ctx.

     The  munge_ctx_strerror()	function  returns  a descriptive text string de-
     scribing the MUNGE error number according to the context ctx, or NULL if no
     error condition exists.  This may provide a  more	detailed  error  message
     than that returned by munge_strerror().

     The  munge_ctx_get()  function gets the value for the option opt associated
     with the MUNGE context ctx, storing the result in	the  subsequent  pointer
     argument.	 If  the  result is a string, that string should not be freed or
     modified by the caller.

     The munge_ctx_set() function sets the value for the option  opt  associated
     with the MUNGE context ctx, using the value of the subsequent argument.

RETURN VALUE
     The  munge_ctx_create() and munge_ctx_copy() functions return a newly allo-
     cated MUNGE context, or NULL on error.

     The munge_ctx_strerror() function returns a pointer  to  a  null-terminated
     constant  text  string,  or NULL if no error condition exists.  This string
     should not be freed or modified by the caller.

     The munge_ctx_get() and munge_ctx_set() functions return EMUNGE_SUCCESS  on
     success, or a MUNGE error number otherwise.

CONTEXT OPTIONS
     The  following context options can be queried via munge_ctx_get() or speci-
     fied via munge_ctx_set().	The type following each enumeration is the vari-
     able type used for the subsequent argument in munge_ctx_set(), or the vari-
     able type of a pointer used for the subsequent argument in munge_ctx_get().

     MUNGE_OPT_CIPHER_TYPE , int
	    Get or set the cipher type (see CIPHER TYPES).

     MUNGE_OPT_MAC_TYPE , int
	    Get or set the MAC type (see MAC TYPES).

     MUNGE_OPT_ZIP_TYPE , int
	    Get or set the compression type (see COMPRESSION TYPES).

     MUNGE_OPT_REALM , char *
	    Get or set the security realm, where the char * type is a  null-ter-
	    minated  character	string.   The string returned by munge_ctx_get()
	    should not be freed or modified by the caller.  NOT  CURRENTLY  SUP-
	    PORTED.

     MUNGE_OPT_TTL , int
	    Get  or  set  the  time-to-live  (in seconds) (see TTL TYPES).  This
	    value controls how long the credential is valid once it has been en-
	    coded.

     MUNGE_OPT_ADDR4 , struct in_addr
	    Get the IPv4 address of the host where the credential  was	encoded.
	    This option cannot be explicitly set.

     MUNGE_OPT_ENCODE_TIME , time_t
	    Get  the  time  (in seconds since the epoch) at which the credential
	    was encoded.  This option cannot be explicitly set.

     MUNGE_OPT_DECODE_TIME , time_t
	    Get the time (in seconds since the epoch) at  which  the  credential
	    was decoded.  This option cannot be explicitly set.

     MUNGE_OPT_SOCKET , char *
	    Get or set the local domain socket for connecting with munged, where
	    the  char  * type is a null-terminated character string.  The string
	    returned by munge_ctx_get() should not be freed or modified  by  the
	    caller.

     MUNGE_OPT_UID_RESTRICTION , uid_t
	    Get  or  set the UID allowed to decode the credential (see UID & GID
	    TYPES).  This value will be matched against the effective user ID of
	    the process requesting the credential decode.

     MUNGE_OPT_GID_RESTRICTION , gid_t
	    Get or set the GID allowed to decode the credential (see UID  &  GID
	    TYPES).   This  value will be matched against the effective group ID
	    of the process requesting the credential decode,  as  well	as  each
	    supplementary  group  of which the effective user ID of that process
	    is a member.

     MUNGE_OPT_IGNORE_TTL , int
	    Get or set the "ignore-ttl" flag.  If this is set to 1,  TTL-related
	    errors  will  be ignored.  munge_decode() will return EMUNGE_SUCCESS
	    instead  of  EMUNGE_CRED_EXPIRED,	EMUNGE_CRED_REWOUND,   or   EMU-
	    NGE_CRED_REPLAYED.

     MUNGE_OPT_IGNORE_REPLAY , int
	    Get  or  set  the "ignore-replay" flag.  If this is set to 1, replay
	    errors will be ignored.  munge_decode() will  return  EMUNGE_SUCCESS
	    instead of EMUNGE_CRED_REPLAYED.

CIPHER TYPES
     Credentials can be encrypted using the secret key shared by all munged dae-
     mons  within a security realm.  Anyone having access to this key can use it
     to decrypt a credential, thereby bypassing any restrictions  being  imposed
     by munged.

     MUNGE_CIPHER_NONE
	    Specify that encryption is to be disabled.

     MUNGE_CIPHER_DEFAULT
	    Specify the default according to the munged configuration.

     MUNGE_CIPHER_BLOWFISH
	    Specify the Blowfish cipher designed by Bruce Schneier.  This cipher
	    has  a  64-bit  block-size and a variable key length.  MUNGE uses it
	    with a 128-bit key in CBC mode.  It is a fast block cipher but  suf-
	    fers  from	a  slow  key setup time.  Consequently, it underperforms
	    when generating small credentials.

     MUNGE_CIPHER_CAST5
	    Specify the CAST5 cipher designed by  Carlisle  Adams  and	Stafford
	    Tavares.   This  cipher  has  a 64-bit block-size and a variable key
	    length.  MUNGE uses it with a 128-bit key in CBC mode.

     MUNGE_CIPHER_AES128
	    Specify the AES (Advanced Encryption Standard) cipher, also known as
	    Rijndael.  It was designed by Joan Daemen and Vincent Rijmen.   This
	    cipher has a 128-bit block-size and a key length of 128, 192, or 256
	    bits.  MUNGE uses it here with a 128-bit key in CBC mode.

     MUNGE_CIPHER_AES256
	    Specify the AES (Advanced Encryption Standard) cipher, also known as
	    Rijndael.	It was designed by Joan Daemen and Vincent Rijmen.  This
	    cipher has a 128-bit block-size and a key length of 128, 192, or 256
	    bits.  MUNGE uses it here with a 256-bit  key  in  CBC  mode.   Cur-
	    rently, MUNGE_CIPHER_AES256 requires the use of MUNGE_MAC_SHA256.

MAC TYPES
     The  message  authentication code (MAC) is a required component of the cre-
     dential; consequently, it cannot be disabled.

     MUNGE_MAC_DEFAULT
	    Specify the default according to the munged configuration.

     MUNGE_MAC_MD5
	    Specify the MD5 algorithm designed by Ron Rivest  and  published  in
	    1991.  This algorithm has a 128-bit message digest.  In 2004, a suc-
	    cessful  collision	attack against MD5 was demonstrated.  In 2009, a
	    theoretical pre-image attack  against  MD5	was  published.   Conse-
	    quently,  use  of  MD5  is not recommended due to its lower security
	    margin.

     MUNGE_MAC_SHA1
	    Specify the SHA-1 algorithm designed by the National Security Agency
	    and published in 1995; this is the successor to the original  Secure
	    Hash Algorithm (now called SHA-0) published in 1993.  This algorithm
	    has a 160-bit message digest.  In 2005, successful collision attacks
	    were  demonstrated	against SHA-1.	In 2017, a successful identical-
	    prefix collision attack (SHAttered) was announced.	In 2020, a  suc-
	    cessful chosen-prefix collision attack (SHA-1 is a Shambles) was an-
	    nounced.   Since  a  pre-image attack has not yet been demonstrated,
	    SHA-1 should still be safe to use within MUNGE; however,  use  of  a
	    SHA-2  hash  function  (such  as  SHA-256 or SHA-512) should be pre-
	    ferred.

     MUNGE_MAC_RIPEMD160
	    Specify the RIPEMD-160 (RACE Integrity Primitives Evaluation Message
	    Digest) algorithm designed	in  Europe  by	Hans  Dobbertin,  Antoon
	    Bosselaers, and Bart Preneel, and published in 1996.  This algorithm
	    has  a  160-bit  message  digest.	It is somewhat less popular than
	    SHA-1 and correspondingly less  well  studied.   While  slower  than
	    SHA-1, it is believed to have a slightly better security margin.

     MUNGE_MAC_SHA256
	    Specify  the  SHA-256  algorithm  designed	by the National Security
	    Agency and published in 2002; this is one of the SHA-2  variants  in
	    the Secure Hash Algorithm family.  This algorithm has a 256-bit mes-
	    sage  digest.   In 2006, NIST began encouraging the use of the SHA-2
	    family of hash functions for all new applications and protocols.

     MUNGE_MAC_SHA512
	    Specify the SHA-512 algorithm  designed  by  the  National	Security
	    Agency  and  published in 2002; this is one of the SHA-2 variants in
	    the Secure Hash Algorithm family.  This algorithm has a 512-bit mes-
	    sage digest.  In 2006, NIST began encouraging the use of  the  SHA-2
	    family of hash functions for all new applications and protocols.

COMPRESSION TYPES
     If  a  compression  type is specified, a payload-bearing credential will be
     compressed accordingly.  However,	if  the  resulting  compressed	data  is
     larger  than  the original uncompressed data, the uncompressed data will be
     restored and compression will be disabled for that credential.

     MUNGE_ZIP_NONE
	    Specify that compression is to be disabled.  This is the recommended
	    setting unless there is a payload of sufficient size to compress.

     MUNGE_ZIP_DEFAULT
	    Specify the default according to the munged configuration.

     MUNGE_ZIP_BZLIB
	    Specify the bzip2 library  developed  by  Julian  Seward.	This  is
	    slower  and  uses more memory, but generally gets better compression
	    on larger payloads.

     MUNGE_ZIP_ZLIB
	    Specify the zlib library developed	by  Jean-loup  Gailly  and  Mark
	    Adler.   This  is  faster and uses less memory, but gets pretty good
	    compression nonetheless.

TTL TYPES
     The time-to-live value specifies the number of seconds  after  the  encode-
     time that the credential is considered valid.  In addition to specifying an
     integer value, the following types are available.

     MUNGE_TTL_MAXIMUM
	    Specify the maximum allowed by the munged configuration.

     MUNGE_TTL_DEFAULT
	    Specify the default according to the munged configuration.

UID & GID TYPES
     The  UID  and  GID restrictions can be used to restrict the decoding of the
     credential based on the effective user  and  group  ID  of  the  requesting
     process.	In  addition to specifying an integer value, the following types
     are available.

     MUNGE_UID_ANY
	    Specify that no UID restriction is to take effect; this is	the  de-
	    fault behavior.

     MUNGE_GID_ANY
	    Specify  that  no GID restriction is to take effect; this is the de-
	    fault behavior.

ERRORS
     Refer to munge(3) for a complete list of errors.

EXAMPLE
     The following example program illustrates the use of the MUNGE  context  to
     query the location of the munged domain socket.

     #include <stdio.h>
     #include <stdlib.h>
     #include <unistd.h>
     #include <munge.h>

     int
     main (int argc, char *argv[])
     {
	 munge_ctx_t ctx;
	 munge_err_t err;
	 char *str;
	 char buf[4096];
	 uid_t uid;
	 gid_t gid;

	 ctx = munge_ctx_create ();
	 if (ctx == NULL) {
	     fprintf (stderr, "Error: Failed to create munge ctx\n");
	     exit (EXIT_FAILURE);
	 }
	 /*  Query the socket name.  Note that the returned 'str' resides
	  *    in the 'ctx' and will be de-allocated via munge_ctx_destroy().
	  */
	 err = munge_ctx_get (ctx, MUNGE_OPT_SOCKET, &str);
	 if (err != EMUNGE_SUCCESS) {
	     fprintf (stderr, "Error: Failed to get munge socket name: %s\n",
		     munge_ctx_strerror (ctx));
	     exit (EXIT_FAILURE);
	 }
	 printf ("socket=%s\n", str);

	 /*  Read and decode a credential from the standard input.
	  *  Ignore expired, rewound, and replayed errors.
	  */
	 err = munge_ctx_set (ctx, MUNGE_OPT_IGNORE_TTL, 1);
	 if (err != EMUNGE_SUCCESS) {
	     fprintf (stderr, "Error: Failed to set ignore-ttl opt: %s\n",
		     munge_ctx_strerror (ctx));
	     exit (EXIT_FAILURE);
	 }
	 if (fgets (buf, sizeof (buf), stdin) == NULL) {
	     fprintf (stderr, "Error: Failed to read credential\n");
	     exit (EXIT_FAILURE);
	 }
	 err = munge_decode (buf, ctx, NULL, NULL, &uid, &gid);
	 if (err != EMUNGE_SUCCESS) {
	     fprintf (stderr, "Error: Failed to decode credential: %s\n",
		     munge_ctx_strerror (ctx));
	     exit (EXIT_FAILURE);
	 }
	 printf ("uid=%d gid=%d\n", uid, gid);

	 munge_ctx_destroy (ctx);
	 exit (EXIT_SUCCESS);
     }

NOTES
     Abandoning  a new or copied MUNGE context without destroying it will result
     in a memory leak.

     The context passed to munge_encode() is treated read-only	except	for  the
     error message that is set when an error is returned.  The context passed to
     munge_decode()  is  set according to the context used to encode the creden-
     tial; however, on error, its settings may be in a state  which  is  invalid
     for  encoding.  Consequently, separate contexts should be used for encoding
     and decoding.

     A context should not be shared between threads unless it is protected by  a
     mutex;  however, a better alternative is to use a separate context (or two)
     for each thread, either by creating a new	one  via  munge_ctx_create()  or
     copying an existing one via munge_ctx_copy().

AUTHOR
     Chris Dunlap <cdunlap@llnl.gov>

COPYRIGHT
     Copyright (C) 2007-2025 Lawrence Livermore National Security, LLC.
     Copyright (C) 2002-2007 The Regents of the University of California.

     MUNGE  is free software: you can redistribute it and/or modify it under the
     terms of the GNU General Public License as published by the  Free	Software
     Foundation,  either version 3 of the License, or (at your option) any later
     version.

     Additionally for the MUNGE library  (libmunge),  you  can	redistribute  it
     and/or  modify  it under the terms of the GNU Lesser General Public License
     as published by the Free Software Foundation, either version 3 of	the  Li-
     cense, or (at your option) any later version.

SEE ALSO
     munge(1),	 remunge(1),   unmunge(1),  munge(3),  munge_enum(3),  munge(7),
     munged(8), mungekey(8).

     https://github.com/dun/munge

munge-0.5.18			   2026-02-10			    MUNGE_CTX(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=munge_ctx_set&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help