USERADD(8) Sistem Yönetim Komutları  USERADD(8)

İSİM

useradd — yeni bir kullanıcı oluşturur veya öntanımlı yeni kullanıcı bilgilerini günceller

KULLANIM


useradd [seçenekler] KULLANICI
useradd -D
useradd -D [seçenekler]

AÇIKLAMA

-D seçeneği belitilmeden çağrıldığında, useradd komutu, komut satırında tanımlanan değerleri ve sistemdeki öntanımlı değerleri kullanarak yeni bir kullanıcı oluşturur. Komut satırında belirtilen seçeneklere bağlı olarak, gerekli sistem dosyalarına yeni kullanıcının bilgileri girilir, ev dizini oluşturulur, ilk dosyalar kopyalanır.

Öntanımlı olarak yeni kullanıcıya yeni bir grup oluşturulur (Bkz: -g, -N, -U ve USERGROUPS_ENAB).

SEÇENEKLER

Bu komuta verilebilecek seçenekler şunlardır:

--badname

Standartlara uymayan isimlere izin verilir.

-b, --base-dir ÜST_DİZİN

-d EV_DİZİNİ belirtilmemişse ÜST_DİZİN sistem için altında kullanıcı ev dizinin oluşturulacağı dizindir. -m seçeneği belirtilmezse ÜST_DİZİN sistemde mevcut olmalıdır.

Bu seçenek belirtilmezse, /etc/default/useradd içindeki HOME değişkeninde belirtilen üst dizin veya öntanımlı olarak /home kullanılır.

-c, --comment AÇIKLAMA

Yeni kullanıcının /etc/passwd dosyasında adı-soyadı olarak kullanılacak dizgeyi belirler.

-d, --home-dir EV_DİZİNİ

Oluşturulan yeni kullanıcının sisteme girişte kullanacağı ev dizinini belirler. Öntanımlı olarak, KULLANICI ismi ÜST_DİZİN'e eklenerek belirlenir ve kullanıcının sisteme giriş dizini olarak kullanılır. EV_DİZİNİ sistemde mevcut değilse -M seçeneği belirtilmediği takdirde oluşturulacaktır.

-D, --defaults

Aşağıdaki “Öntanımlı Değerlerin Değiştirilmesi” bölümüne bakınız.

-e, --expiredate SON_TARİH

Kullanıcı hesabının son kullanma tarihini belirler. Tarih YYYY-AA-GG (Y: yıl, A: ay, G: gün) şeklinde belirtilir.

-f, --inactive ASKI_SÜRESİ

Kullanıcı parolasının SON_TARİHten itibaren, bu hesabın tamamen devre dışı bırakıacağı tarihe kadar geçecek olan sürenin gün cinsinden değerini belirler. Bu değer 0 olarak belirtilirse, parolanın son kullanma tarihinde hesap kapatılır. -1 değeri verilirse, bu özellik iptal edilmiş olur.

ASKI_SÜRESİ belirtilmezse, /etc/default/useradd dosyasındaki INACTIVE değişkeninde belirtilen değer veya öntanımlı olarak -1 kullanılır.

-g, --gid GRUP

Kullanıcının üyesi olacağı birincil grubun adı veya numarası belirtilir. Olmayan gruba ait bir isim veya numara kullanılamaz.

Belirtilmezse, davranış /etc/login.defs içindeki USERGROUPS_ENAB değişkenine bağlı olur. Bu değişken "yes" olarak ayarlanırsa (veya komut satırında -U/--user-group belirtilirse), kullanıcı için oturum açma adıyla aynı ada sahip bir grup oluşturulur. Değişkene "no" değeri atanırsa (veya komut satırında -N/--no-user-group belirtilirse), yeni kullanıcının birincil grup kimliği /etc/default/useradd içindeki GROUP değişkeni tarafından belirtilen değer veya öntanımlı olarak 100 olur.

-G, --groups GRUP1[,GRUP2[,...[GRUPN]]]

Kullanıcının üyesi olacağı ek gruplar belirtilir. Her grup, diğerinden virgül ile ayrılır, arada boşluk bırakılmaz. Burada tanımlanan gruplar, -g ile tanımlanan grubun kısıtlamalarına tabidir. Öntanımlı olarak, kullanıcının sadece birincil grubunun üyesi olduğu varsayılır.

-h, --help

Yardım metnini gösterir ve çıkar.

-k, --skel İSKELET

Kullanıcının ev dizini oluşturulurken, ev dizinine kopyalanacak dosyaları ve dizinleri içeren İSKELET dizinin yerini belirtir.

Bu seçenek yalnızca -m/--create-home seçeneği ile birlikte geçerlidir.

Bu seçenek belirtilmezse, /etc/default/useradd içindeki SKEL değişkeni tarafından belirtilen dizin veya öntanımlı olarak /etc/skel dizini kullanılır.

Mümkünse, ACL'ler ve genişletilmiş nitelikler de kopyalanır.

-K, --key ANAHTAR=DEĞER

/etc/login.defs öntanımlılarını (UID_MIN, UID_MAX, UMASK, PASS_MAX_DAYS ve diğerleri) geçersiz kılar.

Örneğin, parola daha oluşturulmamışken bile, parola eskimesini devre dışı bırakarak sistem hesabı oluştururken -K PASS_MAX_DAYS=-1 seçeneği kullanılabilir. Birden fazla -K seçeneği belirtilebilir. Örnek:

-K UID_MIN=100  -K UID_MAX=499

Dikkat: Birden fazla anahtar-değer çifti belirtilmesi (-K UID_MIN=10,UID_MAX=499 gibi) henüz çalışmamaktadır.

-l, --no-log-init

Kullanıcı lastlog ve faillog veritabanlarına eklenmez.

Öntanımlı olarak, kullanıcının lastlog ve faillog veritabanlarındaki girdileri, daha önce silinmiş bir kullanıcıdan gelen girdinin yeniden kullanılmasını önlemek için sıfırlanır.

Bu seçenek belirtilmezse, /etc/default/useradd içindeki LOG_INIT değişkenine "no" atanmışsa kullanıcı lastlog ve faillog veritabanlarına eklenmez

-m, --create-home

Şayet sistemde kullanıcının ev dizini yok ise, yeni bir dizin oluşturulur. Eğer –k seçeneği belirtilmişse İSKELET dizinin içeriği ev dizinine kopyalanır. –k seçeneği, sadece –m seçeneği ile birlikte kullanıldığında etkilidir.

Öntanımlı olarak, seçenek belirtilmemişse ve CREATE_HOME etkin değilse dizin oluşturulmaz.

Kullanıcının ev dizininin oluşturulduğu ÜST_DİZİN mevcut olmalı ve uygun SELinux bağlamına ve izinlerine sahip olmalıdır. Aksi takdirde kullanıcının ev dizini oluşturulamaz veya erişilemez.

-M, ---no-create-home

/etc/login.defs içinde tanımlı bütün sistemi kapsayan ayarlarda ev dizininin yaratılması gerektiği (CREATE_HOME=yes) belirtilmiş olsa bile, kullanıcı ev dizini oluşturulmaz.

-N, --no-user-group

Oluşturulan yeni kullanıcı ile aynı adlı yeni bir grup oluşturulmaz fakat kullanıcıyı -g seçeneği ile belirtilen gruba veya /etc/default/useradd içindeki GROUP değişkeni tarafından belirtilen gruba ekler.

Öntanımlı davranış (-g, -N ve -U seçenekleri belirtillmemişse) /etc/login.defs içinde USERGROUPS_ENAB değişkeni tarafından tanımanmıştır.

-o, --non-unique

Kullanıcı kimliği eşsiz olmayan bir kullanıcı oluşturmaya izin verir.

Bu seçenek yallnızca -u seçeneği ile birlikte geçerlidir.

-p, --password PAROLA

crypt(3) tarafından döndürülen gibi şifreli parola. Parolanın devre dışı bırakılması öntanımlıdır.

Bilginize

Süreçleri listeleyen kullanıcılara parola (veya şifreli parola) görünür olacağından bu seçeneğin kullanımı önerilmemektedir.

PAROLA sistemin parola politikasına uygun olmalıdır.

-r, --system

Sistem hesabı oluşturur.

Sistem kullanıcıları, /etc/shadow içinde hiçbir eskime bilgisi olmaksızın oluşturulur ve bunların sayısal kimlikleri, UID_MIN-UID_MAX (ve GID karşılıkları) yerine /etc/login.defsiçinde tanımlanan SYS_UID_MIN-SYS_UID_MAX aralığında seçilir.

/etc/login.defs içindeki (CREATE_HOME) öntanımlılardan bağımsız olarak böyle bir kullanıcı için bir ev dizini oluşturulmayacağı unutulmamalıdır. Bir sistem hesabı için bir ev dizini oluşturulması isteniyorsa -m seçeneklerini de belirtmek gerekir.

-R, --root CHROOT_DİZİNİ

Değişiklikleri CHROOT_DİZİNİnde uygular ve CHROOT_DİZİNİndeki yapılandırma dosyaları kullanılır.

-P, --prefix PREFIX_DİZİNİ

Değişiklikleri PREFIX_DİZİNİnde uygular ve PREFIX_DİZİNİndeki yapılandırma dosyaları kullanılır. Bu seçenek chroot yapmaz ve çapraz derlemeye hazırlık için tasarlanmamıştır. Bazı sınırlamalar: NIS ve LDAP kullanıcı ve grupları doğrulanmaz. PAM kimlik kanıtlaması konak dosyalarını kulllanılır. SELinux desteklenmez.

-s, --shell KABUK

Kullanıcının sisteme girişte kullanacağı kabuğun adıdır. Öntanımlı olarak bu değer boş bırakılır, böylece /etc/default/useradd içindeki SHELL değişkeni tarafından belirtilen öntanımlı oturum açma kabuğunun adı veya öntanımlı boş dizge atanır.

-u, --uid KULL_KİMLİK

Kullanıcı kimliğinin sayısal değeridir. Bu değer, -o seçeneği kullanılmadığı sürece, eşsiz olmalıdır. Değer mutlaka pozitif bir sayı olmalıdır. Öntanımlı olarak, diğer kullanıcıların numaralarından ve UID_MIN’den büyük, en küçük numara kullanılır.

Ayrıca, -r seçeneğine ve UID_MAX açıklamasına da bakılabilir.

-U, --user-group

Kulllanıcı ile aynı isimde bir grup oluşturulur ve kullanıcı bu gruba eklenir.

Öntanımlı davranış (-g, -N ve -U seçenekleri belirtilmezse) login.defs(5) dosyasında USERGROUPS_ENAB değişkeni ile tanımlanır.

-Z, --selinux-user SE_KULL

Kullanıcı için SELinux kullanıcısını belirler. Normalde bu alan boş bırakarak öntanımlı SELinux kullanıcısını sistemin seçmesi sağlanır.

Öntanımlı Değerlerin Değiştirilmesi

-D seçeneği ile birlikte kullanıldığı zaman, useradd geçerli öntanımlı değerleri görüntüler. -D diğer seçeneklerle birlikte belirtildiğinde useradd öntanımlı değerleri, seçeneklerde belirtilenler ile günceller. Öntanımlıları değiştiren seçenekler şunlardır:

-b, --base-dir ÜST_DİZİN

Yeni bir kullanıcının ev dizini için ilk dosyayolu önekini belirtir. Yeni bir hesap açarken –d seçeneği belirtilmemişse, yeni kullanıcının adı ÜST_DİZİN'in sonuna eklenerek kulanıcının ev dizinini oluşturur.

Bu seçenek /etc/default/useradd içindeki HOME değişkenini tanımlar.

-e, --expiredate SON_TARİH

Kullanıcı hesabının son kullanma tarihini belirler.

Bu seçenek /etc/default/useradd içindeki EXPIRE değişkenini tanımlar.

-f, --inactive ASKI_SÜRESİ

Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri.

Bu seçenek /etc/default/useradd içindeki INACTIVE değişkenini tanımlar.

-g, --gid GRUP

Yeni bir kullanıcı için birincil grup adı veya grup kimliği (/etc/login.defs içindeki USERGROUPS_ENAB değişkenine "no" değeri atanırsa (veya komut satırında -N/--no-user-group belirtilirse). Belirtilen grup ismi sistemde mevcut olmalı ve sayısal grup kimliği için mevcut bir girdi bulunmalıdır.

Bu seçenek /etc/default/useradd içindeki GROUP değişkenini tanımlar.

-s, --shell KABUK

Yeni bir kullanıcının sisteme girişte kullanacağı kabuğun adı.

Bu seçenek /etc/default/useradd içindeki SHELL değişkenini tanımlar.

EK BİLGİ

/etc/skel dizinindeki (veya /etc/default/useradd dosyasında veya komut satırından belirtilen diğer iskelet dizinindeki) öntanımlı dosyaların değiştirilmesi sistem yöneticisinin sorumluluğundadır.

YETERSİZLİKLER

NIS vey LDAP grubuna kullanıcı ekleyemezsiniz. Bu ilgili sunucusu üzerinde yapılmalıdır.

Benzer şekilde, kullanıcı adı NIS veya LDAP gibi harici bir kullanıcı veritabanında zaten mevcutsa, useradd kullanıcı hesabı oluşturma isteğini reddeder.

Kullanıcı adları küçük harf veya alt çizgi ile başlamalı, ardından küçük harf, rakam, alt çizgi veya tire gelmelidir. Dolar işaretiyle bitebilir. Düzenli ifade olarak: [a-z_][a-z0-9_-]*[$]?

Kullanıcı adları en fazla 32 karakter uzunlukta olabilir.

YAPILANDIRMA

Bu aracın davranışını değiştirmek için kullanılabilecek /etc/login.defs yapılandırma değişkenleri:

CREATE_HOME (mantıksal)

Yeni kullanıcılar için öntanımlı olarak ev dizini oluşturulmasının gerekip gerekmediğini belirtir.

Bu tanım sistem kullanıcıları için geçerli değildir ve komut satırında geçersiz kılınabilir.

GID_MAX (tamsayı), GID_MIN (tamsayı)

groupadd(8), newusers(8) ve useradd tarafından normal grupların oluşturulması için kullanılan grup kimlikleri aralığı.

GID_MIN için öntanımlı değer 1000, GID_MAX için 60000'dir.

HOME_MODE (tamsayı)

Yeni ev dizinleri için kip. Belirtilmezse, kipi oluşturmak için UMASK kullanılır.

useradd ve newusers(8), oluşturdukları ev dizinin kipini ayarlamak için bu değeri kullanır.

LASTLOG_UID_MAX (tamsayı)

lastlog girdilerini güncelleyecek en yüksek kullanıcı kimlik numarası. Daha yüksek kullanıcı kimlikleri genellikle uzak kullanıcı kimliği ve kimlik doğrulama hizmetleri tarafından izlendiğinden, onlar için çok büyük, seyrek bir lastlog dosyası oluşturmaya gerek yoktur.

Yapılandırmada LASTLOG_UID_MAX seçeneğinin olmaması, lastlog girdilerini yazacak kullanıcı kimliğinde sınırlama olmadığı anlamına gelir.

MAIL_DIR (dizge)

Posta kuyruğu dizini. İlgili kullanıcı hesabı silindiğinde veya değişikliğe uğradığında posta kutusunu elden geçirmek için bu gereklidir. Tanımsızsa, derleme sırasında atanan öntanımlı değer kullanılır. Eposta kuyruğunun oluşturulup oluşturulmadığı /etc/default/useradd dosyasındaki CREATE_MAIL_SPOOL değişkeni ile belirlenir.

MAIL_FILE (dizge)

Kullanıcının eposta kuyruğu dosyalarının konumu ev dizinine göreli tanımlanır.

MAIL_DIR ve MAIL_FILE değişkenleri useradd, usermod ve userdel tarafından eposta kuyruğunun oluşturulması, taşınması ve silinmesi için kullanılır.

Bunlar ayrıca, MAIL_CHECK_ENAB için yes tanımlıysa, MAIL ortam değişkenini tanımlamak için de kullanılır.

MAX_MEMBERS_PER_GROUP (tamsayı)

Grup girdisi başına azami üye sayısı. Bu değere ulaşıldığında, /etc/group içinde (aynı ad, aynı parola ve aynı grup kimliği ile) yeni bir grup girdisi (satır) başlatılır

Öntanımlı değer 0 olup, grup üyelerinin sayısı için bir azami sınır olmadığı anlamına gelir.

Bu özellik (grup bölme) grup dosyasındaki satır uzunluğunu sınırlamayı sağlar. NIS grupları için satırların 1024 karakterden uzun olmamasından emin olunmasını sağlamak için yararlıdır.

Bir sınır belirtmek gerekliyse, 25 iyidir.

Grup bölme (bu seçenek) tüm araçlarda desteklenmeyebilir (Shadow araçlarında bile). Gerçekten ihtiyaç duyulmadıkça bu seçenek kullanılmamalıdır.

PASS_MAX_DAYS (tamsayı)

Bir parolanın kullanılabileceği en fazla gün sayısı. Parola bundan daha eskiyse, parola değişikliği zorunlu olacaktır. Belirtilmezse, -1 öntanımlıdır (kısıtlamayı devre dışı bırakır).

PASS_MIN_DAYS (tamsayı)

Parola değişiklikleri arasında izin verilen en az gün sayısı. Bundan daha önce denenen herhangi bir şifre değişikliği reddedilecektir. Belirtilmezse, 0 öntanımlıdır (kısıtlamayı devre dışı bırakır).

PASS_WARN_AGE (tamsayı)

Parolanın süresi dolmadan önce uyarı verilen gün sayısı. Sıfır, yalnızca son kullanma gününde uyarı verildiği anlamına gelir, negatif bir değer hiçbir uyarı verilmediği anlamına gelir. Belirtilmediği takdirde herhangi bir uyarı verilmeyecektir.

SUB_GID_MIN (tamsayı), SUB_GID_MAX (tamsayı), SUB_GID_COUNT (tamsayı)

/etc/subuid varsa, useradd ve newusers(8) komutları (kullanıcının zaten alt grup kimlikleri yoksa), her yeni kullanıcı için SUB_GID_MIN ila SUB_GID_MAX aralığından SUB_GID_COUNT kullanılmayan grup kimliği tahsis eder.

SUB_GID_MIN, SUB_GID_MAX, SUB_GID_COUNT için öntanımlı değerler sırasıyla 100000, 600100000 ve 65536'dır.

SUB_UID_MIN (tamsayı), SUB_UID_MAX (tamsayı), SUB_UID_COUNT (tamsayı)

/etc/subuid varsa, useradd ve newusers(8) komutları (kullanıcının zaten alt grup kimlikleri yoksa), her yeni kullanıcı için SUB_UID_MIN ila SUB_UID_MAX aralığından SUB_UID_COUNT kullanılmayan grup kimliği tahsis eder.

SUB_UID_MIN, SUB_UID_MAX, SUB_UID_COUNT için öntanımlı değerler sırasıyla 100000, 600100000 ve 65536'dır.

SYS_GID_MAX (tamsayı), SYS_GID_MIN (tamsayı)

useradd, groupadd ve newusers tarafından sistem grupları oluşturulurken kullanılan grup kimlikleri aralığı.

SYS_GID_MIN için 101, SYS_GID_MAX için GID_MIN-1 öntanımlıdır.

SYS_UID_MAX (tamsayı), SYS_UID_MIN (tamsayı)

useradd ve newusers(8) komutları tarafından sistem kullanıcıları oluşturulurken kullanılan kullanıcı kimlikleri aralığı.

SYS_UID_MIN için 101, SYS_UID_MAX için UID_MIN-1 öntanımlıdır.

UID_MAX (tamsayı), UID_MIN (tamsayı)

useradd ve newusers(8) komutları tarafından normal kullanıcılar oluşturulurken kullanılan kullanıcı kimlikleri aralığı

UID_MIN için öntanımlı değer 1000, UID_MAX için 60000'dir.

UMASK (tamsayı)

Dosya kipi oluşturma maskesi bu değerle ilklendirilir. Belirtilmezse maske 022 ile ilklendirilir.

useradd(8) ve newusers(8) komutları HOME_MODE tanımlıysa ev dizininin kipini atamak için bu maskeyi kullanır.

Ayrıca, login tarafından kullanıcının ilk umask'ını tanımlamakta kullanılır. Dikkat: Bu maske (QUOTAS_ENAB tanımlıysa) kullanıcının GECOS satırı tarafından veya limits(5) dosyasında K tanımlayıcıdaki sınır belirtimine göre yeniden tanımlanabilir.

USERGROUPS_ENAB (mantıksal)

root olmayan kullanıcılar için, kullanıcı ve grup kimlikleri aynıyken kullanıcı ve grup adı da aynı ise umask grup bitlerinin, sahip bitleri ile aynı olmasını sağlar (örn, 022 -> 002, 077 -> 007).

yes atanırsa, userdel(8) başka üyesi yoksa kullanıcını grubunu siler ve useradd(8) kullanıcı ile aynı isimde bir grup oluşturur.

İLGİLİ DOSYALAR

/etc/passwd

kullanıcı hesabı bilgileri

/etc/shadow

güvenli kullanıcı hesabı bilgileri

/etc/group

grup bilgileri

/etc/gshadow

güvenli grup bilgileri

/etc/default/useradd

hesap oluşumu için öntanımlı bilgiler

/etc/shadow-maint/useradd-pre.d/*, /etc/shadow-maint/useradd-post.d/*

Kullanıcı eklenirken çalıştırılacak run-parts(8) dosyaları. ACTION ortam değişkene useradd ve kullanıcı isimli SUBJECT atanır. useradd-pre.d, herhangi bir kullanıcı eklenmeden önce çalıştırılır. useradd-post.d, kullanıcı eklendikten sonra çalıştırılır. Bir komut dosyası sıfırdan farklı bir değerle çıkarsa, çalışma sonlandırılır.

/etc/skel

öntanımlı dosyaları içeren dizin

/etc/subgid

Kullanıcı başına bağımlı grup kimlikler

/etc/subuid

Kullanıcı başına bağımlı kullanıcı kimlikler

/etc/login.defs

Shadow parola yapılandırması

ÇIKIŞ DURUMU

useradd komutu şu değerlerle çıkar:

0

başarılı

1

parola dosyası güncellenemiyor

2

geçersiz komut sözdizimi

3

seçenek girdisi geçersiz

4

kullanıcı kimliği zaten kullanılıyor (-o olmaksızın)

6

böyle bir grup yok

9

kullanıcı ismi zaten kullanılıyor

10

/etc/group dosyası güncellenemiyor

12

ev dizini oluşturulamıyor

14

SELinux kullanıcı eşlemi güncellenemiyor

İLGİLİ BELGELER

chfn(1), chsh(1), passwd(1), crypt(3), groupadd(8), groupdel(8), groupmod(8), login.defs(5), newusers(8), subgid(5), subuid(5), userdel(8), usermod(8).

ÇEVİREN

© 2003 Yalçın Kolukısa
© 2022 Nilgün Belma Bugüner
Bu çeviri özgür yazılımdır: Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri yapmak için https://github.com/TLBP/manpages-tr/issues adresinde "New Issue" düğmesine tıklayıp yeni bir konu açınız ve isteğinizi belirtiniz.
Yasal Uyarı
 * Özgün Belgenin Lisans ve Telif Hakkı bilgileri:
 *
 * Copyright 1991 - 1994, Julianne Frances Haugh
 * Copyright 1996 - 2000, Marek Michałkiewicz
 * Copyright 2000 - 2006, Tomasz Kłoczko
 * Copyright 2007 - 2012, Nicolas François
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.