15bf5ca77SDevin Teske# -*- tab-width: 4 -*- ;; Emacs 25bf5ca77SDevin Teske# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM 35bf5ca77SDevin Teske############################################################ IDENT(1) 45bf5ca77SDevin Teske# 55bf5ca77SDevin Teske# $Title: dwatch(8) module for [l]chmod(2), fchmodat(2), or similar entry $ 65bf5ca77SDevin Teske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $ 75bf5ca77SDevin Teske# 85bf5ca77SDevin Teske############################################################ DESCRIPTION 95bf5ca77SDevin Teske# 105bf5ca77SDevin Teske# Print mode/path being passed to chmod(2), lchmod(2), fchmodat(2), or similar 115bf5ca77SDevin Teske# 125bf5ca77SDevin Teske############################################################ PROBE 135bf5ca77SDevin Teske 145bf5ca77SDevin Teskecase "$PROFILE" in 155bf5ca77SDevin Teskechmod) 165bf5ca77SDevin Teske : ${PROBE:=$( echo \ 175bf5ca77SDevin Teske syscall::chmod:entry, \ 185bf5ca77SDevin Teske syscall::lchmod:entry, \ 195bf5ca77SDevin Teske syscall::fchmodat:entry )} 205bf5ca77SDevin Teske ;; 215bf5ca77SDevin Teske*) 225bf5ca77SDevin Teske : ${PROBE:=syscall::$PROFILE:entry} 235bf5ca77SDevin Teskeesac 245bf5ca77SDevin Teske 255bf5ca77SDevin Teske############################################################ ACTIONS 265bf5ca77SDevin Teske 275bf5ca77SDevin Teskeexec 9<<EOF 285bf5ca77SDevin Teskethis mode_t mode; 295bf5ca77SDevin Teskethis string path; 305bf5ca77SDevin Teskethis u_char at; 315bf5ca77SDevin Teske 325bf5ca77SDevin Teske$PROBE /* probe ID $ID */ 335bf5ca77SDevin Teske{${TRACE:+ 345bf5ca77SDevin Teske printf("<$ID>"); 355bf5ca77SDevin Teske} 365bf5ca77SDevin Teske /* 375bf5ca77SDevin Teske * Should we expect the first argument to be a file descriptor? 385bf5ca77SDevin Teske * NB: Based on probefunc ending in "at" (e.g., fchmodat(2)) 395bf5ca77SDevin Teske */ 405bf5ca77SDevin Teske this->at = strstr(probefunc, "at") == 415bf5ca77SDevin Teske (probefunc + strlen(probefunc) - 2) ? 1 : 0; 425bf5ca77SDevin Teske 435bf5ca77SDevin Teske this->mode = (mode_t)(this->at ? arg2 : arg1); 445bf5ca77SDevin Teske this->path = copyinstr(this->at ? arg1 : arg0); 455bf5ca77SDevin Teske} 465bf5ca77SDevin TeskeEOF 475bf5ca77SDevin TeskeACTIONS=$( cat <&9 ) 485bf5ca77SDevin TeskeID=$(( $ID + 1 )) 495bf5ca77SDevin Teske 505bf5ca77SDevin Teske############################################################ EVENT DETAILS 515bf5ca77SDevin Teske 52*a061d970SDevin Teskeif [ ! "$CUSTOM_DETAILS" ]; then 535bf5ca77SDevin Teskeexec 9<<EOF 545bf5ca77SDevin Teske /* 555bf5ca77SDevin Teske * Print mode/path details 565bf5ca77SDevin Teske */ 575bf5ca77SDevin Teske printf("%04o %s", this->mode, this->path); 585bf5ca77SDevin TeskeEOF 595bf5ca77SDevin TeskeEVENT_DETAILS=$( cat <&9 ) 60*a061d970SDevin Teskefi 615bf5ca77SDevin Teske 625bf5ca77SDevin Teske################################################################################ 635bf5ca77SDevin Teske# END 645bf5ca77SDevin Teske################################################################################ 65