11d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich/*
21d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* proc-llist.h
31d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Copyright (c) 2009 Red Hat Inc., Durham, North Carolina.
41d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* All Rights Reserved.
51d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*
61d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* This software may be freely redistributed and/or modified under the
71d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* terms of the GNU General Public License as published by the Free
81d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Software Foundation; either version 2, or (at your option) any
91d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* later version.
101d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*
111d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* This program is distributed in the hope that it will be useful,
121d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* but WITHOUT ANY WARRANTY; without even the implied warranty of
131d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
141d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* GNU General Public License for more details.
151d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*
161d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* You should have received a copy of the GNU General Public License
171d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* along with this program; see the file COPYING. If not, write to the
181d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
191d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*
201d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Authors:
211d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*   Steve Grubb <sgrubb@redhat.com>
221d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*/
231d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
241d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#ifndef PROC_HEADER
251d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#define PROC_HEADER
261d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
271d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include "config.h"
281d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
291d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
301d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich/* This is the node of the linked list. Any data elements that are per
311d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich *  record goes here. */
321d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichtypedef struct _lnode{
331d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  pid_t ppid;           // parent process ID
341d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  pid_t pid;            // process ID
351d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  uid_t uid;            // user ID
361d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  char *cmd;		// command run by user
371d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  unsigned long inode;	// inode of socket
381d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  char *capabilities;	// Text of partial capabilities
391d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  char *bounds;		// Text for bounding set
401d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  struct _lnode* next;	// Next node pointer
411d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich} lnode;
421d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
431d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich/* This is the linked list head. Only data elements that are 1 per
441d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich * event goes here. */
451d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichtypedef struct {
461d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  lnode *head;		// List head
471d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  lnode *cur;		// Pointer to current node
481d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich  unsigned int cnt;	// How many items in this list
491d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich} llist;
501d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
511d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid list_create(llist *l);
521d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichstatic inline lnode *list_get_cur(llist *l) { return l->cur; }
531d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid list_append(llist *l, lnode *node);
541d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid list_clear(llist* l);
551d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
561d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich/* Given a message type, find the matching node */
571d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichlnode *list_find_inode(llist *l, unsigned long i);
581d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
591d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#endif
601d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
61