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