1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28 /* All Rights Reserved */ 29 30 31 /* 32 * System includes 33 */ 34 #include <stdio.h> 35 #include <stdlib.h> 36 #include <unistd.h> 37 #include <locale.h> 38 #include <libintl.h> 39 40 /* 41 * local pkg command library includes 42 */ 43 44 #include "libinst.h" 45 #include "messages.h" 46 47 /* 48 * forward declarations 49 */ 50 51 static char *qreasonNoZonename(int caller, int retcode, int started); 52 static char *qreasonWithZonename(int caller, int retcode, int started); 53 54 /* 55 * ***************************************************************************** 56 * global external (public) functions 57 * ***************************************************************************** 58 */ 59 60 /* 61 * Name: qreason 62 * Description: return message describing specified "quit reason" 63 * Arguments: caller - integer describing the "caller: 64 * Caller identities: 65 * 0 - pkginstall - pkgask 66 * 1 - pkginstall - pkgadd 67 * 2 - pkginstall - mailmsg 68 * 3 - pkgremove - quitmsg 69 * 4 - pkgremove - mailmsg 70 * retcode - integer return code describing "reason" 71 * includeZonename - integer describing zone for reason 72 * == 0 - do not include a zone name in the message 73 * != 0 - include a zone name in the message 74 * Returns: char * 75 * NOTE: all messages are returned from static space that does not need 76 * to be free()ed when no longer needed 77 * NOTE: imbedded "%s"s in returned messages are consistent with the 78 * caller and zone name inclusion: 79 * 0 - no %s's 80 * 1 - one %s - package name 81 * 2 - three %s - package name, rootpath, package instance 82 * 3 - one %s - package name 83 * 4 - two %s - package name, rootpath 84 * If "includeZonename" is true, an extra "%s" is added at the 85 * end of each message for the zone name to be included. 86 */ 87 88 char * 89 qreason(int caller, int retcode, int started, int includeZonename) 90 { 91 if (includeZonename == 0) { 92 return (qreasonNoZonename(caller, retcode, started)); 93 } 94 95 return (qreasonWithZonename(caller, retcode, started)); 96 } 97 98 /* 99 * ***************************************************************************** 100 * static internal (private) functions 101 * ***************************************************************************** 102 */ 103 104 static char * 105 qreasonNoZonename(int caller, int retcode, int started) 106 { 107 switch (retcode) { 108 case 0: 109 case 10: 110 case 20: 111 switch (caller) { 112 case 0: /* pkginstall - pkgask */ 113 return (MSG_RE_SUC); 114 case 1: /* pkginstall - pkgadd */ 115 return (MSG_IN_SUC0); 116 case 2: /* pkginstall - mailmsg */ 117 return (MSG_IN_SUC1); 118 case 3: /* pkgremove - quitmsg */ 119 return (MSG_RM_SUC0); 120 case 4: /* pkgremove - mailmsg */ 121 return (MSG_RM_SUC1); 122 default: 123 return (MSG_UNKREQ); 124 } 125 126 case 1: 127 case 11: 128 case 21: 129 switch (caller) { 130 case 0: /* pkginstall - pkgask */ 131 return (MSG_RE_FAIL); 132 case 1: /* pkginstall - pkgadd */ 133 return (MSG_IN_FAIL0); 134 case 2: /* pkginstall - mailmsg */ 135 return (MSG_IN_FAIL1); 136 case 3: /* pkgremove - quitmsg */ 137 return (MSG_RM_FAIL0); 138 case 4: /* pkgremove - mailmsg */ 139 return (MSG_RM_FAIL1); 140 default: 141 return (MSG_UNKREQ); 142 } 143 144 case 2: 145 case 12: 146 case 22: 147 switch (caller) { 148 case 0: /* pkginstall - pkgask */ 149 return (MSG_RE_PARFAIL); 150 case 1: /* pkginstall - pkgadd */ 151 return (MSG_IN_PARFAIL0); 152 case 2: /* pkginstall - mailmsg */ 153 return (MSG_IN_PARFAIL1); 154 case 3: /* pkgremove - quitmsg */ 155 return (MSG_RM_PARFAIL0); 156 case 4: /* pkgremove - mailmsg */ 157 return (MSG_RM_PARFAIL1); 158 default: 159 return (MSG_UNKREQ); 160 } 161 162 case 3: 163 case 13: 164 case 23: 165 switch (caller) { 166 case 0: /* pkginstall - pkgask */ 167 return (MSG_RE_USER); 168 case 1: /* pkginstall - pkgadd */ 169 return (MSG_IN_USER0); 170 case 2: /* pkginstall - mailmsg */ 171 return (MSG_IN_USER1); 172 case 3: /* pkgremove - quitmsg */ 173 return (MSG_RM_USER0); 174 case 4: /* pkgremove - mailmsg */ 175 return (MSG_RM_USER1); 176 default: 177 return (MSG_UNKREQ); 178 } 179 180 case 4: 181 case 14: 182 case 24: 183 switch (caller) { 184 case 0: /* pkginstall - pkgask */ 185 return (MSG_RE_SUA); 186 case 1: /* pkginstall - pkgadd */ 187 return (MSG_IN_SUA0); 188 case 2: /* pkginstall - mailmsg */ 189 return (MSG_IN_SUA1); 190 case 3: /* pkgremove - quitmsg */ 191 return (MSG_RM_SUA0); 192 case 4: /* pkgremove - mailmsg */ 193 return (MSG_RM_SUA1); 194 default: 195 return (MSG_UNKREQ); 196 } 197 198 case 5: 199 case 15: 200 case 25: 201 switch (caller) { 202 case 0: /* pkginstall - pkgask */ 203 return (MSG_RE_SUI); 204 case 1: /* pkginstall - pkgadd */ 205 return (MSG_IN_SUI0); 206 case 2: /* pkginstall - mailmsg */ 207 return (MSG_IN_SUI1); 208 case 3: /* pkgremove - quitmsg */ 209 return (MSG_RM_SUI0); 210 case 4: /* pkgremove - mailmsg */ 211 return (MSG_RM_SUI1); 212 default: 213 return (MSG_UNKREQ); 214 } 215 216 case 99: 217 if (started) { 218 switch (caller) { 219 case 0: /* pkginstall - pkgask */ 220 return (MSG_RE_IEPI); 221 case 1: /* pkginstall - pkgadd */ 222 return (MSG_IN_IEPI0); 223 case 2: /* pkginstall - mailmsg */ 224 return (MSG_IN_IEPI1); 225 case 3: /* pkgremove - quitmsg */ 226 return (MSG_RM_IEPI0); 227 case 4: /* pkgremove - mailmsg */ 228 return (MSG_RM_IEPI1); 229 default: 230 return (MSG_UNKREQ); 231 } 232 } 233 234 switch (caller) { 235 case 0: /* pkginstall - pkgask */ 236 return (MSG_RE_IE); 237 case 1: /* pkginstall - pkgadd */ 238 return (MSG_IN_IE0); 239 case 2: /* pkginstall - mailmsg */ 240 return (MSG_IN_IE1); 241 case 3: /* pkgremove - quitmsg */ 242 return (MSG_RM_IE0); 243 case 4: /* pkgremove - mailmsg */ 244 return (MSG_RM_IE1); 245 default: 246 return (MSG_UNKREQ); 247 } 248 249 default: 250 switch (caller) { 251 case 0: /* pkginstall - pkgask */ 252 return (MSG_RE_UNK); 253 case 1: /* pkginstall - pkgadd */ 254 return (MSG_IN_UNK0); 255 case 2: /* pkginstall - mailmsg */ 256 return (MSG_IN_UNK1); 257 case 3: /* pkgremove - quitmsg */ 258 return (MSG_RM_UNK0); 259 case 4: /* pkgremove - mailmsg */ 260 return (MSG_RM_UNK1); 261 default: 262 return (MSG_UNKREQ); 263 } 264 } 265 } 266 267 static char * 268 qreasonWithZonename(int caller, int retcode, int started) 269 { 270 switch (retcode) { 271 case 0: 272 case 10: 273 case 20: 274 switch (caller) { 275 case 0: /* pkginstall - pkgask */ 276 return (MSG_RE_SUC_ZONE); 277 case 1: /* pkginstall - pkgadd */ 278 return (MSG_IN_SUC0_ZONE); 279 case 2: /* pkginstall - mailmsg */ 280 return (MSG_IN_SUC1_ZONE); 281 case 3: /* pkgremove - quitmsg */ 282 return (MSG_RM_SUC0_ZONE); 283 case 4: /* pkgremove - mailmsg */ 284 return (MSG_RM_SUC1_ZONE); 285 default: 286 return (MSG_UNKREQ_ZONE); 287 } 288 289 case 1: 290 case 11: 291 case 21: 292 switch (caller) { 293 case 0: /* pkginstall - pkgask */ 294 return (MSG_RE_FAIL_ZONE); 295 case 1: /* pkginstall - pkgadd */ 296 return (MSG_IN_FAIL0_ZONE); 297 case 2: /* pkginstall - mailmsg */ 298 return (MSG_IN_FAIL1_ZONE); 299 case 3: /* pkgremove - quitmsg */ 300 return (MSG_RM_FAIL0_ZONE); 301 case 4: /* pkgremove - mailmsg */ 302 return (MSG_RM_FAIL1_ZONE); 303 default: 304 return (MSG_UNKREQ_ZONE); 305 } 306 307 case 2: 308 case 12: 309 case 22: 310 switch (caller) { 311 case 0: /* pkginstall - pkgask */ 312 return (MSG_RE_PARFAIL_ZONE); 313 case 1: /* pkginstall - pkgadd */ 314 return (MSG_IN_PARFAIL0_ZONE); 315 case 2: /* pkginstall - mailmsg */ 316 return (MSG_IN_PARFAIL1_ZONE); 317 case 3: /* pkgremove - quitmsg */ 318 return (MSG_RM_PARFAIL0_ZONE); 319 case 4: /* pkgremove - mailmsg */ 320 return (MSG_RM_PARFAIL1_ZONE); 321 default: 322 return (MSG_UNKREQ_ZONE); 323 } 324 325 case 3: 326 case 13: 327 case 23: 328 switch (caller) { 329 case 0: /* pkginstall - pkgask */ 330 return (MSG_RE_USER_ZONE); 331 case 1: /* pkginstall - pkgadd */ 332 return (MSG_IN_USER0_ZONE); 333 case 2: /* pkginstall - mailmsg */ 334 return (MSG_IN_USER1_ZONE); 335 case 3: /* pkgremove - quitmsg */ 336 return (MSG_RM_USER0_ZONE); 337 case 4: /* pkgremove - mailmsg */ 338 return (MSG_RM_USER1_ZONE); 339 default: 340 return (MSG_UNKREQ_ZONE); 341 } 342 343 case 4: 344 case 14: 345 case 24: 346 switch (caller) { 347 case 0: /* pkginstall - pkgask */ 348 return (MSG_RE_SUA_ZONE); 349 case 1: /* pkginstall - pkgadd */ 350 return (MSG_IN_SUA0_ZONE); 351 case 2: /* pkginstall - mailmsg */ 352 return (MSG_IN_SUA1_ZONE); 353 case 3: /* pkgremove - quitmsg */ 354 return (MSG_RM_SUA0_ZONE); 355 case 4: /* pkgremove - mailmsg */ 356 return (MSG_RM_SUA1_ZONE); 357 default: 358 return (MSG_UNKREQ_ZONE); 359 } 360 361 case 5: 362 case 15: 363 case 25: 364 switch (caller) { 365 case 0: /* pkginstall - pkgask */ 366 return (MSG_RE_SUI_ZONE); 367 case 1: /* pkginstall - pkgadd */ 368 return (MSG_IN_SUI0_ZONE); 369 case 2: /* pkginstall - mailmsg */ 370 return (MSG_IN_SUI1_ZONE); 371 case 3: /* pkgremove - quitmsg */ 372 return (MSG_RM_SUI0_ZONE); 373 case 4: /* pkgremove - mailmsg */ 374 return (MSG_RM_SUI1_ZONE); 375 default: 376 return (MSG_UNKREQ_ZONE); 377 } 378 379 case 99: 380 if (started) { 381 switch (caller) { 382 case 0: /* pkginstall - pkgask */ 383 return (MSG_RE_IEPI_ZONE); 384 case 1: /* pkginstall - pkgadd */ 385 return (MSG_IN_IEPI0_ZONE); 386 case 2: /* pkginstall - mailmsg */ 387 return (MSG_IN_IEPI1_ZONE); 388 case 3: /* pkgremove - quitmsg */ 389 return (MSG_RM_IEPI0_ZONE); 390 case 4: /* pkgremove - mailmsg */ 391 return (MSG_RM_IEPI1_ZONE); 392 default: 393 return (MSG_UNKREQ_ZONE); 394 } 395 } 396 397 switch (caller) { 398 case 0: /* pkginstall - pkgask */ 399 return (MSG_RE_IE_ZONE); 400 case 1: /* pkginstall - pkgadd */ 401 return (MSG_IN_IE0_ZONE); 402 case 2: /* pkginstall - mailmsg */ 403 return (MSG_IN_IE1_ZONE); 404 case 3: /* pkgremove - quitmsg */ 405 return (MSG_RM_IE0_ZONE); 406 case 4: /* pkgremove - mailmsg */ 407 return (MSG_RM_IE1_ZONE); 408 default: 409 return (MSG_UNKREQ_ZONE); 410 } 411 412 default: 413 switch (caller) { 414 case 0: /* pkginstall - pkgask */ 415 return (MSG_RE_UNK_ZONE); 416 case 1: /* pkginstall - pkgadd */ 417 return (MSG_IN_UNK0_ZONE); 418 case 2: /* pkginstall - mailmsg */ 419 return (MSG_IN_UNK1_ZONE); 420 case 3: /* pkgremove - quitmsg */ 421 return (MSG_RM_UNK0_ZONE); 422 case 4: /* pkgremove - mailmsg */ 423 return (MSG_RM_UNK1_ZONE); 424 default: 425 return (MSG_UNKREQ_ZONE); 426 } 427 } 428 } 429